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
{{ message }}
Repository navigation
Support typing.Union/typing.Optional in isinstance check (/support old-style unions) #17680
This issue may already exists but I was unable to find an exact match. There are plenty of issues related to the PEP 604 syntax but none that are really about using typing.Union/typing.Optional/...
src/union.py:6: note: Revealed type is "Union[builtins.int, None]"
src/union.py:8: error: Argument 2 to "isinstance" has incompatible type "<typing special form>"; expected "_ClassInfo" [arg-type]
src/union.py:9: note: Revealed type is "Any"
src/union.py:11: error: Argument 2 to "isinstance" has incompatible type "<typing special form>"; expected "_ClassInfo" [arg-type]
src/union.py:12: note: Revealed type is "Any"
src/union.py:17: note: Revealed type is "Union[builtins.int, None]"
src/union.py:19: error: Parameterized generics cannot be used with class or instance checks [misc]
src/union.py:19: error: Argument 2 to "isinstance" has incompatible type "<typing special form>"; expected "_ClassInfo" [arg-type]
src/union.py:20: note: Revealed type is "Any"
Found 4 errors in 1 file (checked 1 source file)
Running the above with pyright:
.../src/union.py
.../src/union.py:6:17 - information: Type of "foo" is "int | None"
.../src/union.py:9:17 - information: Type of "foo" is "int | None"
.../src/union.py:12:17 - information: Type of "foo" is "int | None"
.../src/union.py:17:17 - information: Type of "foo" is "int | None"
.../src/union.py:20:17 - information: Type of "foo" is "int | None"
0 errors, 0 warnings, 5 informations
Summary:
when using the PEP 604-syntax the type is correctly narrowed to Union[builtins.int, None]
when using the typing.Union and/or typing.Optional syntax the type is not narrowed and remains Any (and errors are shown)
Activity
hauntsaninja commentedon Aug 16, 2024
PR welcome. IIRC isinstance on old-style unions is only supported on 3.10 and newer
Somewhat better support for isinstance on old-style unions
Somewhat better support for isinstance on old-style unions (#19714)