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

