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

如何用mypy正确标注键为int或str的Union类型字典?

解决mypy对字典Union类型的初始化报错问题

当你标注Union[dict[int, Any], dict[str, Any]]类型的变量并赋值空字典时,mypy会报错,原因是空字典的类型为Dict[<nothing>, <nothing>],无法自动匹配到你定义的Union类型——这个Union要求字典的键必须是全部为int或全部为str,而空字典的键类型是未确定的<nothing>,不符合约束。

以下是几种可行的解决方法:

方法一:使用cast强制类型转换

通过cast告诉mypy,这个空字典属于Union中的某一种具体类型:

from typing import Union, Any, cast

special_dict: Union[dict[int, Any], dict[str, Any]]
special_dict = cast(dict[int, Any], {})

方法二:显式初始化具体类型的字典

直接初始化一个符合Union中某一类型的空字典,而不是用字面量{}:

from typing import Union, Any

special_dict: Union[dict[int, Any], dict[str, Any]] = dict[int, Any]()

方法三:后续赋值时明确键类型

如果后续会给字典添加键值对,mypy会根据你添加的键自动推断字典类型,此时初始化空字典不会报错:

from typing import Union, Any

special_dict: Union[dict[int, Any], dict[str, Any]]
special_dict = {}
special_dict[123] = "test"  # mypy自动推断为dict[int, Any]
# 或者
# special_dict["key"] = 456  # mypy自动推断为dict[str, Any]

方法四:自定义类型别名(可选)

如果需要多次使用这个类型,可以定义别名来简化代码:

from typing import Union, Any

SpecialDict = Union[dict[int, Any], dict[str, Any]]

special_dict: SpecialDict = dict[str, Any]()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:45:41