Mypy 不检测有关在函数内部使用 NamedTuple 的错误

Mypy does not detect errors regarding the use of NamedTuple inside functions

在下面的代码中,x2x3的定义显然是错误的,但mypy并没有抱怨。

from typing import NamedTuple

class X(NamedTuple):
    a: float
    b: float
    c: float

def foo():
    x1 = X(1, 2, 3)
    x2 = X(1, 2)
    x3 = X("1", 2, 3)
    

如果我删除函数声明并将这三行放入主文件范围,则 mypy 会正确识别这两个错误

from typing import NamedTuple

class X(NamedTuple):
    a: float
    b: float
    c: float

x1 = X(1, 2, 3)
x2 = X(1, 2)
x3 = X("1", 2, 3)
    

这是为什么,我该怎么办?

我是运行 python 3.9.5 我的 0.931

您的 foo 函数未键入,您必须告诉 mypy 以使用 ->:

键入它
def foo() -> None: