我有两个这样的功能。我如何输入提示
func()
,这样 mypy 就不会引发错误?
现在它说
test.py:14: error: Argument 1 to "len" has incompatible type "str | None"; expected "Sized" [arg-type]
from typing import Optional
path = "path"
def func(path: str) -> Optional[str]:
s = "foo"
if True:
return s
return None
def func2() -> None:
if func(path) is not None:
if len(func(path)) > 0:
print("Yes")
else:
print("No")
我尝试了
Optional[str]
和Union
,但似乎都不起作用。
mypy 无法知道两次调用
func
会产生相同的结果。因此它无法知道如果第一次 func(path) is not None
,第二次 func(path)
被称为返回值是 None
是不可能的。 mypy 在这个保守的假设中是正确的。
您可以将返回值绑定到变量,这允许 mypy 跨类型缩小if
推理该变量
的可能类型。
def func2() -> None:
foo = func(path)
# `foo` can only be `None` or a `str`; but `foo` in `len(foo)` can't be None.
if foo is not None and len(foo) > 0:
print("Yes")
return
print("No")