我有以下Python模块:
from typing import TypedDict
class P(TypedDict):
x: int
def return_p() -> P:
return {'x': 5}
p = return_p()
p['abc'] = 1
def test():
p = return_p()
p['abc'] = 2
当我在其上运行mypy
时,它理所当然地抱怨了p['abc']=1
行,但是忽略了p['abc']=2
行中完全相同的问题。
这会在Windows 10(带有Python 3.8和mypy 0.781)上发生。 Python 3.7会发生相同的行为(我需要从TypedDict
导入typing_extensions
)
这是怎么回事?
答案 0 :(得分:2)
这是因为未键入test()
。在签名中添加类型提示将使其可检查:
def test() -> None:
p = return_p()
p['abc'] = 2