Python 2.7中泛型列表转List[str]的类型匹配问题求助
解决
Expected List[str], got list类型错误的方案 看起来你遇到了类型检查工具(比如mypy)的类型推断问题——虽然你生成的列表里实际都是字符串,但工具没把它识别为List[str]类型,导致GetRanksAll调用时报错。下面是几种可靠的解决方法:
方法1:显式添加类型注解
直接给viewerNames标注List[str]类型,让类型检查器明确知道这是字符串列表:
from typing import List viewerIDs = Parent.GetViewerList() if len(viewerIDs) <= 0: return viewerIDsNames = Parent.GetDisplayNames(viewerIDs) # 显式标注类型,同时用列表推导式简洁生成字符串列表 viewerNames: List[str] = [str(name) for name in viewerIDsNames.values()] # 现在调用应该不会报错 viewerRanks = Parent.GetRanksAll(viewerNames)
这里用列表推导式遍历viewerIDsNames.values()(比循环append更简洁),同时通过类型注解告诉检查器这个列表的元素都是字符串。
方法2:使用cast强制类型转换(适合确认元素都是字符串的场景)
如果你确定viewerIDsNames.values()返回的所有值都可以安全转换为字符串,可以用typing.cast来强制类型转换,让类型检查器认可这个列表的类型:
from typing import List, cast viewerIDs = Parent.GetViewerList() if len(viewerIDs) <= 0: return viewerIDsNames = Parent.GetDisplayNames(viewerIDs) viewerNames = cast(List[str], [str(name) for name in viewerIDsNames.values()]) viewerRanks = Parent.GetRanksAll(viewerNames)
为什么你之前的尝试没生效?
viewerNames = list(viewerIDsNames.values()):如果values()返回的不是字符串类型,类型检查器会把这个列表推断为list[Any],不符合List[str]的要求;map(str, viewerIDsNames.values()):map返回的是迭代器,不是列表,需要转成list,但即使转成列表,类型检查器可能还是无法自动推断为List[str];[str(name) for name in viewerIDsNames]:这里遍历的是字典的键而不是值,应该改成viewerIDsNames.values()才对!这可能是你之前的一个小失误。
最后提醒一下:如果运行时还有问题,要确认GetDisplayNames返回的字典值是否真的可以被str()正确转换为字符串,避免出现非预期的类型错误。
内容的提问来源于stack exchange,提问作者Tamil Ninja
相关产品推荐
相关产品推荐

