如何让Mypy检测TypedDict中html字段的类型赋值错误?
解决Mypy未检测TypedDict字段类型不匹配的问题
问题原因
Mypy默认允许隐式类型转换:对于实现了__str__方法的对象(比如BeautifulSoup的Tag和NavigableString),会默认允许将其赋值给str类型的字段,因此不会触发类型错误;而整数123属于内置类型,Mypy默认禁止这类隐式转换,所以赋值时会报错。
解决方案
修改mypy.ini配置,开启禁止隐式类型转换的选项:
[mypy] python_version = 3.10 warn_unused_configs = True disallow_incomplete_defs = True disallow_untyped_defs = True disallow_implicit_conversion = True # 新增这一行,禁止隐式类型转换
额外说明
- 如果需要保留
body的字符串表示,可以显式转换为str,这样既符合类型要求,Mypy也不会报错:example: Example = {"html": str(body), "text": html_to_text(body.get_text())} - 若希望开启全部严格类型检查,也可以直接设置
strict = True(该选项包含disallow_implicit_conversion等多项严格规则):[mypy] python_version = 3.10 warn_unused_configs = True strict = True
验证效果
添加配置后,Mypy会在{"html": body}这一行提示类似以下的错误,符合你的预期:
error: Incompatible types (expression has type "Tag | NavigableString", TypedDict key "html" has type "str") [assignment]
内容的提问来源于stack exchange,提问作者wildfluss
相关产品推荐
相关产品推荐

