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

如何解决Mypy调用多类型函数时的返回值类型提示错误?

解决Mypy类型不匹配问题的正确方式

你的问题根源在于accepts_string_or_list的类型提示没有明确输入类型和输出类型是一致的,Mypy只能看到它返回str | list,无法关联输入输出的类型对应关系。解决这个问题的最佳方案是使用泛型TypeVar来绑定输入输出的类型:

修正后的代码

from typing import TypeVar

# 定义一个只能是str或list的类型变量
T = TypeVar('T', str, list)

def accepts_string_or_list(inputs: T) -> T:
    if isinstance(inputs, list):
        return inputs + ['1']
    return inputs + '1'

def accepts_string(inputs: str) -> str:
    # do something to inputs string
    return accepts_string_or_list(inputs)

原理说明

  • 用TypeVar定义的T会被Mypy追踪:当你传入str类型的参数时,T会被推断为str,函数的返回类型也会被确定为str;传入list时同理。
  • 这样accepts_string调用accepts_string_or_list时,Mypy能明确知道返回值是str,不会再报类型不匹配的错误。

临时替代方案(不推荐)

如果不想修改原函数的泛型定义,也可以用cast强制指定返回类型,但这种方式是绕过Mypy的类型检查,不如泛型方案严谨:

from typing import cast

def accepts_string(inputs: str) -> str:
    # do something to inputs string
    return cast(str, accepts_string_or_list(inputs))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:12:07