-
-
Couldn't load subscription status.
- Fork 3k
Description
Bug Report
The following snippet works fine at runtime on 3.10+. It should be accepted as a valid type alias definition on Python 3.10+ (and should be accepted in stub files regardless of Python version). However, mypy raises a false-positive error. The error does not go away if you use typing.TypeAlias:
from typing import Callable, TypeAlias
A = Callable[[], str] | int # error: Unsupported left operand type for | ("object")
B: TypeAlias = Callable[[], str] | int # error: Unsupported left operand type for | ("object")Mypy does accept the following (with the order of types reversed) as a valid type alias on Python 3.10+ and in stub files:
C = int | Callable[[], str] # No error using Python 3.10 (in a `.py file), or in a stub file on any Python version.Much like with #12392, this error is only reproduceable if Callable is the outermost type. The following produces no errors:
D = list[Callable[[], str] | int]There is also an additional bug that only exists for stub files running with --python-version set to 3.9 or lower, when using a Callable that has a PEP 604 union as its return type or a PEP 604 union in its parameter specification, and when the Callable is itself in a PEP 604 union:
X = int | Callable[[], str | bool] # error: Unsupported left operand type for | ("Type[str]")
Y = int | Callable[[str | bool], str] # error: Unsupported left operand type for | ("Type[str]")To Reproduce
- Mypy playground link here for the errors which affect stubs and
.pyfiles. - For the stub-specific errors, paste the code samples into a
.pyifile, then run mypy on the file with--python-version=3.9.
Expected Behavior
No errors should be reported.
Cc. @JelleZijlstra