You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In 1.16, this code raises an error at the first return after the None check, Incompatible return value type (got "None", expected "T"), though it was fine in 1.15
Your Environment
Mypy version used: 1.16
Mypy command-line flags: stock
Mypy configuration options from mypy.ini (and other config files): n/a
Python version used: 3.11, 3.12
The text was updated successfully, but these errors were encountered:
from typing import Callable, TypeVar
T = TypeVar("T")
def foo(f: Callable[[], T]) -> T:
ret = f()
if ret is None:
return ret
return ret
hauntsaninja
changed the title
'Incompatible return value type (... expected "T")' when using param spec and is None in wrapped function
[1.16 regression] narrowing a typevar via comparison to None
May 29, 2025
I will take a look at this (hopefully during weekend). The best course of action may be to infer a type variable with upper bound None (or anything else that doesn't make a meaningful intersection with given type variable). Essentially we can do something like (very roughly) meet(T(bound=A), B) == T(bound=meet(A, B)).
Bug Report
Consider the following: https://mypy-play.net/?mypy=master&python=3.12&gist=dbad46bbd0f39d316a2e82262ceeb4fa
In 1.16, this code raises an error at the first return after the None check,
Incompatible return value type (got "None", expected "T")
, though it was fine in 1.15Your Environment
mypy.ini
(and other config files): n/aThe text was updated successfully, but these errors were encountered: