Python map转换字符串为列表时mypy报错的type hint设置方法
mypy对map传入list构造器报错的解决方案
报错的核心原因是mypy无法自动推断list构造器在当前场景下接收str类型入参、返回list[str]类型结果,因此判定list和map期望的入参函数类型不匹配。
下面提供三种可消除报错的方案,运行逻辑和原有代码完全一致:
方案1:给map添加显式类型参数(Python 3.9+支持)
直接给map指定参数和返回值类型,无需修改原有业务逻辑:
lines = list(map[str, list[str]](list, ['abc', 'def'])) assert lines == [['a', 'b', 'c'], ['d', 'e', 'f']]
方案2:改用列表推导(更推荐)
列表推导的类型推断逻辑对mypy更友好,不需要额外加任何类型提示就能通过检查,代码可读性也更高:
lines = [list(s) for s in ['abc', 'def']] assert lines == [['a', 'b', 'c'], ['d', 'e', 'f']]
方案3:显式标注list构造器的类型
如果一定要保留原有map写法,也可以提前给list构造器绑定明确的函数类型:
from typing import Callable str_to_list: Callable[[str], list[str]] = list lines = list(map(str_to_list, ['abc', 'def'])) assert lines == [['a', 'b', 'c'], ['d', 'e', 'f']]
内容的提问来源于stack exchange,提问作者krumpelstiltskin
相关产品推荐
相关产品推荐

