我注意到 mypy 在进入 lambda 范围时会忘记类型信息。下面用一个小例子来解释一下:
from typing import Optional, Callable
def wrapper(x: Callable[[], None]):
x()
def foo(a: int):
print(str(a))
a: Optional[int] = 0
if a is None:
exit()
wrapper(lambda: foo(a))
Mypy 抱怨这个片段错误:Argument 1 to "foo" has incompatible type "None"; expected "int"。然而,我们已经检查过 a 不是None之前的。这是非常奇怪的,因为如果我们直接调用foo(a)(没有包装器),它确实可以工作。我正在使用 python 3.6.10 和 mypy 0.740。
这是有意的行为吗?如果是这样,您将如何正确输入此内容?
蛊毒传说
相关分类