UnboundLocalError报错排查及Python气温数据读取函数优化求助
问题解决与代码修正
错误原因分析
UnboundLocalError的核心问题是:你仅在if line.isdigit()的代码块内定义了full_data变量,如果没有任何一行满足该条件(比如文件前半部分全是注释行),函数执行到return full_data时,这个变量从未被初始化,因此触发报错。
除此之外,你的代码还存在几个逻辑漏洞:
data.close缺少括号,应该写成data.close(),否则不会执行文件关闭操作line.isdigit()判断逻辑错误:数据行包含逗号(比如100522,19010101, -24, 0),不是纯数字字符串,永远不会进入if代码块- 仅保存最后一条符合条件的数据,无法收集所有日期和气温
- 返回的是拼接字符串,无法拆分成
max_dates, max_temps两个变量
修正后的代码
def read_data(text): dates = [] temps = [] # 使用with语句自动管理文件生命周期,无需手动关闭 with open(text, 'r') as data: for line in data: line = line.strip() # 跳过空行、注释行和表头行 if not line or line.startswith((' ', 'E', 'T', 'K', 'D', 'F', 'S')): continue split_data = line.split(',') # 提取日期和气温,去除多余空格 date = split_data[1].strip() # 将气温从0.1℃单位转换为实际℃ temp = float(split_data[2].strip()) / 10 dates.append(date) temps.append(temp) return dates, temps max_dates, max_temps = read_data('DeBiltTempMax2022.txt')
关键修改说明
- 初始化
dates和temps两个列表,用于存储所有日期和气温数据 - 使用
with语句处理文件,自动完成打开/关闭操作,避免资源泄漏 - 精准过滤无效行,只处理包含实际数据的行
- 对气温进行单位转换,方便后续业务使用
- 返回两个列表,匹配你调用时的变量赋值需求
内容的提问来源于stack exchange,提问作者Maja Kubara
相关产品推荐
相关产品推荐

