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

向Python字典追加元素时触发Attribute Error的问题排查

排查AttributeError:向字典值追加元素失败的问题

首先看你代码里的核心问题:你用了collections.defaultdict(list)来自动生成值为列表的字典,但在处理州名的时候,错误地把列表覆盖成了整数0:

dict[State] = dict.get(State,0)

这行代码完全多余——defaultdict(list)的特性就是当访问不存在的键时,自动创建一个空列表作为值。而你这行把原本应该是列表的值改成了0(整数类型),后面再执行dict[State].append(RegionName)时,自然会触发AttributeError,因为整数没有append()方法。

另外还有两个潜在问题需要修正:

  • State变量没有初始化,如果文件第一行不是州名,会直接触发NameError
  • 重复读取文件:先用pandas读了unit,后面又用open读hand,完全没必要

修正后的代码

import re
from collections import defaultdict

# 初始化默认字典,值为列表
college_towns = defaultdict(list)
current_state = None  # 初始化当前州变量,避免未定义错误

with open('university_towns.txt', 'r') as hand:
    for line in hand:
        line = line.strip()  # 先去除首尾空白字符,处理更干净
        # 匹配州名行(格式:州名[edit])
        state_match = re.match(r'(.+)\[edit\]', line)
        if state_match:
            current_state = state_match.group(1).strip()
            # 这里不需要手动赋值,defaultdict会自动创建空列表
            continue
        # 处理大学城行(格式:城镇名(大学名)...)
        if current_state is not None:  # 确保已经找到过州名
            # 提取城镇名,直到第一个'('为止
            region_name = line.split('(')[0].strip()
            college_towns[current_state].append(region_name)

# 打印结果示例
for state, towns in list(college_towns.items())[:3]:
    print(f"{state}: {towns}")

关键改进点

  1. 移除错误的赋值语句:删掉dict[State] = dict.get(State,0),让defaultdict自动管理列表的创建
  2. 初始化current_state:避免未定义变量的错误,确保只有在找到州名后才处理大学城
  3. 更可靠的州名匹配:用re.match直接提取州名,比split更精准
  4. 使用with语句:自动管理文件句柄,避免资源泄漏
  5. 变量名更清晰:把dict改成college_towns,避免和内置类型dict重名(虽然Python允许,但不推荐)

这样修改后,就能正确生成你期望的格式:{'Alabama': ['Auburn', 'Florence', ...], 'Alaska': ['Fairbanks'], ...}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:17