使用mypy时如何解决kwargs解包的类型检查报错问题
解决办法
mypy报错的核心原因是它默认把input_kwargs推断成了Dict[str, bool],但你的函数参数包含多种类型,mypy无法识别这个字典的键对应函数的合法参数。以下是几种实用的解决方式:
方法1:用TypedDict明确字典类型(推荐)
这是最规范的方案,能让mypy精准识别字典的键和对应类型,还能检查键名是否合法:
from typing import TypedDict # 定义与函数参数匹配的TypedDict,total=False表示允许只传部分键 class MyFuncKwargs(TypedDict, total=False): a: str b: bool c: int input_kwargs: MyFuncKwargs = {'b': True} result = my_func(**input_kwargs)
方法2:用cast临时指定类型
如果不想额外定义TypedDict,可以用cast强制告诉mypy字典的正确类型:
from typing import cast, Dict, Union input_kwargs = cast(Dict[str, Union[str, bool, int]], {'b': True}) result = my_func(**input_kwargs)
方法3:直接标注字典的类型集合
也可以直接给字典变量标注值的类型为函数参数类型的联合:
from typing import Dict, Union input_kwargs: Dict[str, Union[str, bool, int]] = {'b': True} result = my_func(**input_kwargs)
注意:这种方式无法检查键名是否是函数的合法参数,比如写错键名'd': True时mypy不会报错。
内容的提问来源于stack exchange,提问作者user112495
相关产品推荐
相关产品推荐

