我有一个返回
str
或指定后备值(str
或 None
)的函数。当给出 str
回退时,该函数保证返回 str
。然而,在此运行 mypy 会出现错误。
MWE:
from typing import Any
def f(x: str, fallback: str | None) -> str | None:
if x.lower() == "yes":
return "okay"
return fallback
f("no", fallback="").lower()
f.py:10: error: Item "None" of "str | None" has no attribute "lower" [union-attr]
如何告诉 mypy 在函数的返回值上调用
lower()
是安全的?
您需要调用来解释可能的空结果:
result = f("no", fallback="")
end = result.lower() if result is not None else result