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

UnboundLocalError报错咨询:局部变量state未赋值即引用

解决UnboundLocalError: local variable 'state' referenced before assignment的问题

嘿,我来帮你搞明白这个报错到底咋回事~

首先,这个报错的核心意思是:你在函数里用到了局部变量state,但在你用它的那个时刻,这个变量还没被赋值过。

结合你贴的代码片段来看,你的逻辑大概是这样的:

  • 遇到带[edit]的行,就把这一行的内容去掉[edit]后赋值给state(也就是记录当前州名)
  • 遇到带(的行,就提取城镇名,然后把state和城镇名一起加入列表

但这里有两个容易踩坑的地方:

  1. state的初始化缺失:如果文件里的某一行是城镇行,但在它之前没有任何一行触发过state = line[:-6]这个赋值操作(比如文件开头直接就是城镇行,或者中间有不符合条件的行跳过了state赋值),那当你要把state和town一起添加的时候,state还没被定义,直接引用就会触发这个报错。
  2. line.rstrip()没生效:字符串是不可变类型,你直接调用line.rstrip()不会改变原变量,得把处理后的结果赋值回去,不然行尾的换行符会干扰你判断line[-6:]=="[edit]"(比如行尾有换行的话,最后6个字符就不是[edit]了)

修复方案

给你调整后的代码示例,解决这两个问题:

def get_list_of_university_towns():
    with open("university_towns.txt") as townfile:
        unitowns = townfile.readlines()
    town_list = []
    state = ""  # 先初始化state变量,避免未赋值就引用
    for line in unitowns:
        line = line.rstrip()  # 把处理后的行赋值回去,去掉末尾的换行和空格
        if line.endswith("[edit]"):
            # 去掉[edit]后再strip一下,避免州名前后有多余空格
            state = line[:-6].strip()
        elif ' (' in line:
            # 确保state已经有有效州名再添加
            if state:
                town = line[:line.index("(")-1].strip()
                town_list.append([state, town])
    return town_list

为啥这样能解决问题?

  • 一开始就初始化state为空白字符串,彻底避免了“引用未赋值变量”的情况;
  • 加了if state:的判断,确保只有当我们已经获取到有效的州名时,才会把城镇信息加入列表,不会混入无效的空州名;
  • 修复了line.rstrip()的赋值问题,让行尾的判断更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:07:35