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
'"dict" is not subscriptable' error when using a type alias for dict in a .pyi stub file, with Python <= 3.8 #11859
This error only occurs when mypy is run using Python <= 3.8. Here is a minimal reproducible example:
_DictReadMapping=dictclassFoo(_DictReadMapping[str, int]): ... # error: "dict" is not subscriptableBar=_DictReadMapping[int, str] # error: "dict" is not subscriptable
The following, however, do not cause an error in Python <= 3.8 in a .pyi stub file:
_DictReadMapping=dictBaz: _DictReadMapping[str, int] # type alias used as an annotation: okayclassSpam(dict[str, int]): ... # `dict` used as superclass without a type alias: okay
Expected Behavior
In Python <= 3.8, dict is not subscriptable at runtime. However, it should be subscriptable in a .pyi stub file, which does not need to ever be "run". Moreover, it is subscriptable in a .pyi file if a type alias is not being used. The behaviour should be the same, whether or not you are using a type alias.
Your Environment
This bug has been reproduced on MacOS, Ubuntu and Windows on Python 3.6, 3.7 and 3.8. The mypy version being used is 0.930.
Use case
I came across this bug in an early draft of python/typeshed#6717. As you can see, using this kind of syntax fails the typeshed CI for mypy, but not for any other type checker. (In this case, there was an easy workaround.)
Activity
AlexWaygood commentedon Dec 29, 2021
(Cc. @JukkaL, @sobolevn, since this is somewhat related to python/typeshed#4820)
sobolevn commentedon Dec 29, 2021
Related to #11863
I can refactor
TypeAliaslogic after my initial PR is merged 👍Fix PEP 585 type aliases in stubs
Fix PEP 585 type aliases in stubs (#11918)
Fix PEP 585 type aliases in stubs (#11918)
Fix PEP 585 type aliases in stubs (python#11918)