获取嵌套字典数据时遇AttributeError:'list'对象无'get'属性
问题分析与解决方法
可能的问题根源
尽管调试时看到line是字典,但实际遍历过程中大概率存在部分line元素不是字典,或是LinkedTxn字段的值为空列表/非列表类型,导致后续调用[0]或属性访问时触发错误;也可能是遍历逻辑误将列表整体当成单个字典处理。
修复后的代码示例
通过增加安全校验,兼容异常数据格式,同时提取目标字段:
# 示例输入数据 payment_data = [{'Amount': 45.0,'LinkedTxn': [{'TxnId': '129', 'TxnType': 'Invoice'}]}] result = [] for line in payment_data: # 校验当前line是否为字典类型 if not isinstance(line, dict): continue amount = line.get('Amount') # 读取LinkedTxn,不存在则返回空列表 linked_txn_list = line.get('LinkedTxn', []) # 校验LinkedTxn是否为非空列表 if isinstance(linked_txn_list, list) and linked_txn_list: linked_txn = linked_txn_list[0] # 校验列表元素是否为字典 if isinstance(linked_txn, dict): txn_id = linked_txn.get('TxnId') txn_type = linked_txn.get('TxnType') result.append([amount, txn_type, txn_id]) print(result) # 输出: [[45.0, 'Invoice', '129']]
关键优化点
- 多层类型校验:确保
line是字典、LinkedTxn是列表且非空、列表元素是字典,避免格式异常触发错误 - 带默认值的get方法:
line.get('LinkedTxn', [])在字段不存在时返回空列表,防止None调用[0]出错 - 跳过异常数据:单个不符合格式的数据不会中断整个遍历流程
排查辅助方案
如果仍有错误,可在遍历中添加打印,定位异常数据:
for idx, line in enumerate(payment_data): print(f"第{idx}条数据类型: {type(line)}, 内容: {line}") # 后续处理逻辑
内容的提问来源于stack exchange,提问作者Archangel16179
相关产品推荐
相关产品推荐

