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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:25:31