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

天气估算Python函数报错:字符串索引越界,求解决方案

问题排查与修复方案

错误原因分析

  1. 索引越界/未定义变量错误:
    • 当文件存在空行时,if temp.strip()分支不会执行,temperature变量未被赋值(或沿用上一行旧值),后续直接访问temperature索引会触发错误;若某行数据格式错误(分割后不足4个字段),访问temperature[3]也会引发索引越界。
  2. 变量名不匹配:函数最后返回rainy,但统计雨天天数的变量是rain,会触发NameError。
  3. 正确计数逻辑错误:rainy_correct = correct + 1写法错误,应该对自身累加,而非引用correct的值。
  4. 晴天判断逻辑偏差:原代码中晴天的判断条件是温差<=10 且 湿度<=50,但根据雨天判定规则(温差>10 且 湿度>50),晴天应该是不满足雨天条件的所有情况,而非同时满足两个反向条件,这会导致部分数据被错误归类。
  5. 空行未跳过后续判断:空行时仍会执行正确性校验逻辑,导致错误或统计结果失真。

修复后的代码

def estimate_weather(filename):
    rainy_days = 0
    correct_count = 0
    
    with open(filename, 'r') as handle:
        for line in handle:
            line = line.strip()
            if not line:
                continue  # 跳过空行
            
            # 解析数据并校验格式
            try:
                data = list(map(float, line.split(',')))
                if len(data) != 4:
                    continue  # 跳过字段数量错误的行
            except ValueError:
                continue  # 跳过无法转换为浮点数的行
            
            temp_diff = data[1] - data[0]
            humidity = data[2]
            rainfall = data[3]
            
            # 判断是否估算为雨天
            is_estimated_rain = temp_diff > 10 and humidity > 50
            if is_estimated_rain:
                rainy_days += 1
            
            # 判断估算是否符合规则
            if (is_estimated_rain and rainfall > 0) or (not is_estimated_rain and rainfall == 0):
                correct_count += 1
    
    return rainy_days, correct_count

修复说明

  • 主动跳过空行和格式错误的行,从根源避免索引越界问题;
  • 简化变量命名,消除变量名混淆的问题;
  • 严格遵循需求中的估算规则,统一正确性判断逻辑;
  • 增加异常处理,避免因非法数据导致程序崩溃;
  • 移除冗余变量,简化代码逻辑结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:05:12