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

Mypy调用add()向set添加tuple时报类型不兼容错误的原因是什么?

报错原因

Mypy是静态类型检查工具,报错和你提前声明的变量类型不匹配有关,和Python运行时set是否支持tuple元素无关:
你声明adgroups_by_campaign_id的类型为Dict[CampaignId, Set[str]],相当于你明确告诉Mypy:这个字典里每个值都是「只允许存字符串元素的集合」,但你后续调用add()方法传入的是Tuple[str, str]类型的二元组,和你声明的集合元素类型冲突,所以Mypy会抛出类型不兼容错误。

解决方案
  • 如果你的业务逻辑确实需要集合存储二元组,直接修改变量的类型声明即可,将Set[str]调整为Set[Tuple[str, str]],修改后的声明代码如下:
from typing import Dict, Set, Tuple
from collections import defaultdict

adgroups_by_campaign_id: Dict[CampaignId, Set[Tuple[str, str]]] = defaultdict(set)
  • 如果你本来预期集合里存的是字符串,调整add()方法的入参,改成符合str类型要求的内容即可。

补充说明:Python运行时的set确实支持添加所有可哈希类型的元素,tuple属于不可变类型满足可哈希要求,所以如果不开启Mypy校验,你的代码是可以正常运行的,但这不符合你自己提前声明的类型约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:04