mypy将返回None的dict.get识别为Optional[str]引发类型不匹配问题
报错原因说明
- 你定义
my_dict = {'k':'v'}时,所有键均为字符串类型,所有值也均为字符串类型,mypy会自动将my_dict的类型推导为dict[str, str] - Python标准库中
dict.get()方法的类型规则为:不传默认值参数时,返回值类型为Optional[字典值的类型],对应推导为dict[str, str]的字典,get方法的返回值自然会被判定为Optional[str] - 你定义的
test函数入参要求的类型是Optional[List[str]],二者类型不匹配,因此触发类型报错
常见修复方案
你可以根据实际业务逻辑选择对应方案:
- 显式声明字典的类型,适配函数入参要求
from typing import Optional, List, Dict def test(a: Optional[List[str]]) -> None: pass # 明确标注字典值的类型为Optional[List[str]] my_dict: Dict[str, Optional[List[str]]] = {'k': ['v']} test(my_dict.get('foo'))
- 调整函数入参的类型,适配实际传值场景
from typing import Optional, List # 入参兼容字符串和字符串列表两种情况 def test(a: Optional[str | List[str]]) -> None: pass my_dict = {'k':'v'} test(my_dict.get('foo'))
- 确认该次调用的返回值符合要求时,用
cast强制转换类型
from typing import Optional, List, cast def test(a: Optional[List[str]]) -> None: pass my_dict = {'k':'v'} test(cast(Optional[List[str]], my_dict.get('foo')))
内容的提问来源于stack exchange,提问作者eljusticiero67
相关产品推荐
相关产品推荐

