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
If a @contextmanager yields a generic type alias, mypy 1.11 errors with Argument 1 to "contextmanager" has incompatible type "$TYPE"; expected "$TYPE" [arg-type], where the inferred and expected types are identical.
This does not happen if the generic type is inlined (no type alias), or if the type alias is not generic; see playground link below for examples.
This started happening in 1.11 (didn't happen in 1.10). This may be related to #8696, but I opened a new issue because it looks like a regression.
Either fail with a useful error message (the inferred and expected types being exactly the same is confusing; I am not sure what would fix the error), or don't fail (like 1.10).
Actual Behavior
error: Argument 1 to "contextmanager" has incompatible type "Callable[[], Iterator[Callable[[_T], _T]]]"; expected "Callable[[], Iterator[Callable[[_T], _T]]]" [arg-type]
Your Environment
Mypy version used: 1.11.0
Mypy command-line flags: --strict
Mypy configuration options from mypy.ini (and other config files): n/a
Python version used: 3.12
The text was updated successfully, but these errors were encountered:
This now "correctly" exposes an old bug #3924. When I print the actual and expected types, they are def [T] () -> Iterator[def (T) -> T] and def () -> Iterator[def [T] (T) -> T] so the error is technically correct, as the former is indeed not a subtype of the latter. The problem is that with current type printing logic, both callables have same user-facing representation.
Actually, I think we should finally fix #3924, although it has only few upvotes, it affects much more people, there are a lot of duplicates since it is hard to track these kind of errors to the original issue. I am also leaving this one open for bad error message.
ilevkivskyi
changed the title
"incompatible type" for contextmanager yielding a generic type alias (mypy 1.11)
Cryptic error message for two generic callables with different variable binding
Oct 10, 2024
Uh oh!
There was an error while loading. Please reload this page.
Bug Report
If a
@contextmanager
yields a generic type alias, mypy 1.11 errors withArgument 1 to "contextmanager" has incompatible type "$TYPE"; expected "$TYPE" [arg-type]
, where the inferred and expected types are identical.This does not happen if the generic type is inlined (no type alias), or if the type alias is not generic; see playground link below for examples.
This started happening in 1.11 (didn't happen in 1.10). This may be related to #8696, but I opened a new issue because it looks like a regression.
Real code that tripped this: link.
To Reproduce
Short version (more examples in playground links below):
Playground:
Expected Behavior
Either fail with a useful error message (the inferred and expected types being exactly the same is confusing; I am not sure what would fix the error), or don't fail (like 1.10).
Actual Behavior
Your Environment
mypy.ini
(and other config files): n/aThe text was updated successfully, but these errors were encountered: