-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Are you reporting a bug, or opening a feature request?
I think it's a bug or very unexpected behavior at least. Related issues I found: #1965, #4334.
Code
d = {'k1': 'qwe', 'k2': []}
reveal_type(d)
value: str = d['k1']
Actual Output
$ mypy file.py
file.py:2: error: Revealed type is 'builtins.dict[builtins.str*, typing.Sequence*[builtins.str]]'
file.py:3: error: Incompatible types in assignment (expression has type "Sequence[str]", variable has type "str")
So, as far as I understand, mypy tried to find the strictest type for values of d
, which is Sequence[str]
in this case. In Python, string is a Sequence of (sub)strings (s[0] == s[0][0] == s[0][0][0]
), also list is a Sequence, so this is understandable. Unfortunately, the rule that string is a sequence of (sub)strings does not work in case of value: str = d['k1']
.
Expected output
To get rid of the error I need to manually give more general type: d: Dict[str, Any]
, so this is not such a big problem. Having said that, expected behavior would be: No "Incompatible types in assignment" error for the given code.
Versions
Python 3.6.5
mypy==0.600