Union of Literals as key in union of TypedDict false positive
还没有人认领这个 Issue。
评估
调研方向
首先,使用 mypy 运行提供的 Python 3.11 复现代码,然后跟踪由 Literal 键和 TypedDict 映射组成的联合类型的 TypedDict 键验证。完成的标准是 get_value_from_AB 能够在没有误报的情况下通过类型检查,同时单字典用例仍然通过。
由索引模型根据 Issue 内容生成。
描述
Bug Report
The function
def get_value(key: CombinedDictKey, mapping: CombinedDict):
return mapping[key]
raises an error when mapping is a union of two TypedDicts and key is a union of two Literals containing the keys of those TypedDicts. It works when typed with just one of the Literals and TypedDicts.
To Reproduce
from typing import Literal, TypedDict, Union
class DictA(TypedDict):
x: int
y: int
class DictB(TypedDict):
z: str
class DictAB(DictA, DictB):
pass
DictAKey = Literal["x", "y"]
DictBKey = Literal["z"]
DictABKey = Union[DictAKey, DictBKey]
dict_a = DictA(x=1, y=2)
dict_b = DictB(z="z")
dict_ab = DictAB(**dict_a, **dict_b) # type: ignore # Unrelated issue #11108
def get_value_from_A(key: DictAKey, mapping: DictA):
return mapping[key] # Passes type check as expected
def get_value_from_B(key: DictBKey, mapping: DictB):
return mapping[key] # Passes type check as expected
def get_value_from_AB(key: DictABKey, mapping: DictAB):
return mapping[key] # Fails type check with error: TypedDict key must be a string literal
Expected Behavior
return mapping[key] passes typing in all three cases.
Actual Behavior
In the case of get_value_from_AB, return mapping[key] raises error: TypedDict key must be a string literal; expected one of ("z", "x", "y"). This is unexpected as it passes for the functions typed with only one of DictA or DictB.
Your Environment
- Mypy version used: 0.991
- Python version used: 3.11.0
- 主要语言
- Python
- 星标
- 20.6k
- 派生
- 3.3k
- 平均合并
- 1 天 18 小时
- 30 天内合并 PR
- 54
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
python/mypy 的其他 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
-
bug
难度 2/5 1-3 小时 新手友好度 76/100
-
documentation
难度 2/5 1-3 小时 新手友好度 72/100
-
bug topic-configuration topic-error-reporting
难度 2/5 1-3 小时 新手友好度 68/100
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
难度 2/5 1-3 小时 新手友好度 88/100
OpenHands/extensions#626 · 1 条评论 ·
-
难度 1/5 1 小时以内 新手友好度 90/100
CSCfi/sd-search-api#39 ·
-
难度 1/5 1 小时以内 新手友好度 90/100
-
难度 2/5 1-3 小时 新手友好度 68/100
StevenBlack/hosts#3255 ·