如何解决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
相关产品推荐
相关产品推荐

