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

返回相同类型的函数类型提示不生效问题排查

问题:为什么str -> str场景不被T -> T兼容?

以下代码在mypy检查时会报错,但从逻辑上看,str -> str似乎应该属于T -> T的范畴,问题出在哪?

from typing import TypeVar

T = TypeVar("T")
def unch(arg:T) -> T:
    if isinstance(arg, str):
        return arg 
    return arg

mypy检查结果:

# error: Incompatible return value type (got "str", expected "T")

更新2:限定TypeVar后代码可正常通过检查

给TypeVar指定绑定类型后,代码就能通过mypy检查了:

from typing import TypeVar, Any

T = TypeVar("T", str, Any)
def unch(arg:T) -> T:
    if isinstance(arg, str):
        return arg
    return arg

原因解析

用无约束的TypeVar("T")时,mypy会把T当成任意具体类型。比如调用unch(123)时,T是int,函数必须返回int,但代码分支里返回了str,这就打破了「输入T返回T」的约定——mypy没法确定当arg是str时,T就一定是str,所以会报错。

而更新后的代码给TypeVar加了str和Any的绑定,T只能是这两种类型:

  • 传入str时,返回str完全符合T=T的要求;
  • 传入其他类型时,T会被推断为Any,Any类型和任意类型都兼容,所以返回值不会触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:37:07