为什么TypedDict调用update方法时mypy类型校验不通过?
报错原因
- 该报错属于mypy静态类型校验的规则限制,对应代码在Python运行时可以正常执行,因为TypedDict在运行时本质就是普通字典。
- 0.990版本以前的mypy没有对
TypedDict.update方法的关键字参数传参形式做类型适配,该方法的类型签名仅支持传入同结构字典/键值对可迭代对象两种入参,任何关键字参数都会被判定为非法。
解决方法
方法1:升级mypy到兼容版本
mypy 0.990及以上版本已正式支持TypedDict的update方法关键字参数校验,升级后不需要修改原有代码即可通过校验,升级命令如下:pip install --upgrade mypy>=0.990
方法2:修改update的传参形式
如果暂时无法升级mypy,可以把要更新的字段包装成字典对象传入update:
# 单个字段更新 t.update({"b": 3}) # 多个字段同时更新 t.update({"a": 4, "b": 3})
方法3:直接对字段赋值
如果仅需要更新单个字段,直接通过键赋值是所有mypy版本都兼容的写法:
t["b"] = 3
内容的提问来源于stack exchange,提问作者zyxue
相关产品推荐
相关产品推荐

