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

如何解决向字典内嵌套列表追加元素时mypy报‘object无append属性’错误

解决mypy报错"object has no attribute append"的问题

问题原因

mypy无法自动识别my_dict['key'][1]是列表类型——因为my_dict['key']是包含字符串和列表的混合类型列表,mypy会将其推断为List[object],索引访问后得到的是object类型,自然没有append方法。

解决方法

1. 添加精确的类型注解

通过类型注解明确嵌套结构的类型,让mypy能正确推断:

from typing import List, Dict, Union, TypedDict

# 定义内层字典的类型
class InnerItem(TypedDict):
    id: str
    number: str

# 明确外层字典的类型
my_dict: Dict[str, List[Union[str, List[InnerItem]]]] = {
    'key': ['string', [{'id': 'id_value', 'number': 'number_value'}]]
}

# 此时append操作不会触发mypy报错
my_dict['key'][1].append({'id2': 'id_value2', 'number2': 'number_value2'})

2. 使用类型断言

如果不想写复杂注解,用断言告诉mypy目标元素是列表:

my_dict = {'key': ['string', [{'id': 'id_value', 'number': 'number_value'}]]}

# 断言并检查类型
assert isinstance(my_dict['key'][1], list)
my_dict['key'][1].append({'id2': 'id_value2', 'number2': 'number_value2'})

断言不仅能让mypy认可类型,还能在运行时做校验,避免实际类型不符导致的错误。

3. 重构数据结构(推荐)

混合类型的列表可读性差且易引发类型问题,建议改为更清晰的结构:

# 重构后用字典拆分混合元素
my_dict = {
    'key': {
        'text': 'string',
        'items': [{'id': 'id_value', 'number': 'number_value'}]
    }
}

# 追加元素逻辑清晰,mypy自动识别类型
my_dict['key']['items'].append({'id2': 'id_value2', 'number2': 'number_value2'})

内容的提问来源于stack exchange,提问作者J. Donič

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:05:28