如何为返回str|None的函数添加Mypy类型提示以消除报错?
解决Mypy对Optional[str]的类型报错问题
你的func函数的类型标注是正确的,报错的根源不是类型提示本身,而是代码逻辑的写法问题:
你在func2里两次调用了func(path)——第一次判断它不是None,但第二次调用时,Mypy无法保证这一次的返回值和上一次一致(类型检查器只做静态类型分析,不会执行代码推导函数实际返回值),所以仍然会认为传给len的参数可能是None,从而触发报错。
修复代码
把func(path)的结果存到一个变量里,复用这个变量完成判断和长度检查:
from typing import Optional path = "path" def func(path: str) -> Optional[str]: s = "foo" if True: return s return None def func2() -> None: func_result = func(path) if func_result is not None: if len(func_result) > 0: print("Yes") else: print("No")
这样Mypy会通过类型窄化(Type Narrowing)识别出func_result在if分支中是确定的str类型,不会再报错。
补充说明
Optional[str]和 Python 3.10+ 支持的str | None是完全等价的,你的函数返回值标注没有问题。- 类型检查器不执行代码逻辑,必须通过变量复用让它明确变量的具体类型。
内容的提问来源于stack exchange,提问作者user22990699
相关产品推荐
相关产品推荐

