You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么mypy对嵌套字典赋值操作的类型检测会出现异常?

mypy 0.910 嵌套字典赋值异常原因解析

无标注报错的核心原因

该现象属于mypy 0.910版本对异构字典的自动类型推断特性:

  • 未添加显式类型标注时,mypy会计算字典所有键对应值的公共父类型,作为该字典值的统一类型约束。示例代码中的字典存在两类值:'a'对应str类型,'b'对应dict[str, int]类型,0.910版本的推导逻辑会将二者的公共父类型误判定为Collection[str],这是一个仅支持遍历、不支持索引赋值的抽象集合类型,因此对d['b']['d']赋值时会触发不支持索引操作的报错。

标注dict后正常的原因

当你为变量添加d: dict的显式标注时,相当于告知mypy该变量为无类型约束的通用字典,等价于dict[Any, Any],此时mypy会跳过对该字典的键、值类型以及内部结构的严格检查,所有赋值操作都会被判定为合法,因此不再触发报错。

严格类型校验可选方案

如果需要保留mypy的严格类型检查能力,同时支持嵌套字典赋值,可以添加更精准的类型标注:

from typing import Dict, Union

d: Dict[str, Union[str, Dict[str, Union[int, str]]]] = {
    'a': 'a',
    'b': {
        'c': 1
    }
}

d['b']['d'] = 'b'

内容的提问来源于stack exchange,提问作者DeepSpace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:24:04