mypy
似乎足够聪明,可以检测到在检查了None
的可选值后,类型的Optional
部分被忽略。
意思是:声明值:Optional[int]
会导致值在if value is not None
之后表现得像int
。
我想我陷入了类似的问题,但Optional int
在list
中。
以下是演示片段:
a: List[Optional[int]] = [None, None]
a[0] = 5
a[1] = 10
b: int = 0
if a[0] != None:
b = a[0]
它显示错误:
test.py:12: error: Incompatible types in assignment (expression has
type "Optional[int]", variable has type "int")
Found 1 error in 1 file (checked 1 source file)
我确实检查了a[0] is not None
,但我不知道为什么它仍然无法将a[0]的类型从int | None
缩小到int
,因为None
的条件已经检查过了。
我相信mypy
目前了解is None
和is not None
检查:
https://github.com/python/mypy/issues/8000
您需要对
mypy
执行if self.ignore is None
以获取[…]
显然
if a[0] is not None:
应该起作用。注意CCD_ 18和CCD_。