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

如何修复函数返回联合类型时mypy的赋值类型不兼容错误?

修复mypy类型错误的最佳方法

问题根源

当前函数仅声明返回Union[int, str],mypy无法根据传入参数b的具体值(1或0)推断出对应的返回类型,因此认为赋值给int/str类型变量时存在类型不兼容问题。

最佳方案:使用函数重载(@overload)

通过typing.overload为函数定义不同输入对应的返回类型,让mypy能精准推断返回值类型,这是类型安全且最符合规范的解决方式。

修复后的代码:

from typing import Union, overload, Literal

@overload
def a(b: Literal[0]) -> str:
    ...

@overload
def a(b: int) -> int:
    ...

def a(b: int) -> Union[int, str]:
    if b:
        return b
    else:
        return '2'

c: int = a(1)  # mypy可推断返回int,无错误
d: str = a(0)  # mypy可推断返回str,无错误

这里用Literal[0]精准限定输入为0时返回字符串,其他整数输入返回整数,让类型检查逻辑更严谨。

其他可选方案(不推荐)

  • 类型断言(cast):手动指定返回类型,但需要开发者自行保证逻辑正确性,类型检查器无法验证,存在风险:
    from typing import Union, cast
    
    def a(b: int) -> Union[int, str]:
        if b:
            return b
        else:
            return '2'
    
    c: int = cast(int, a(1))
    d: str = cast(str, a(0))
    

内容的提问来源于stack exchange,提问作者emcek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:52:13