为什么`mypy`不能检测到函数内部错误的TypedDict用法

时间:2020-06-22 07:37:50

标签: python mypy python-typing

我有以下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

这是怎么回事?

1 个答案:

答案 0 :(得分:2)

这是因为未键入test()。在签名中添加类型提示将使其可检查:

def test() -> None:
    p = return_p()
    p['abc'] = 2