You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:15:09