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

Python读取逗号分隔txt查询ID时报List index out of range如何解决

索引越界报错原因与修复方案

核心问题梳理

  • 文件读取逻辑错误:原代码使用readline()仅读取了文件的第一行,后续遍历的是单个字符串的每个字符,拆分后得到的列表长度不足3,访问file_list[2]直接触发索引越界
  • 输入逻辑顺序错误:先将输入强制转为整数再判断是否等于字符串finished,用户输入finished时会直接触发类型报错
  • 语法硬错误:
    • 循环体缩进完全错误,行处理、拆分逻辑不在遍历文件内容的循环内
    • 对列表类型的chosen_line调用split()方法,直接触发属性错误
    • 把包含字符串前缀的内容(如"not solo: {0}".format(x))强制转为浮点数,直接触发值错误
  • 匹配逻辑错误:需求是匹配第一列的ID值,原代码错误按行号匹配,和需求不符

修正后可运行代码

import math

# 预先读取处理所有文件内容,生成ID到对应数据的映射,避免重复读取
id_data_map = {}
with open('test.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        # 跳过空行
        if not line:
            continue
        parts = line.split(',')
        # 跳过列数不符合的行,从根源避免索引越界
        if len(parts) != 3:
            continue
        # 格式校验,跳过内容不合法的行
        try:
            row_id = int(parts[0])
            float_value = float(parts[1])
            tag = parts[2].strip()
            id_data_map[row_id] = (float_value, tag)
        except:
            continue

# 处理用户输入
user_input = input("请输入ID数值,结束请输入'finished':")
if user_input == 'finished':
    print("再见。")
else:
    # 校验输入格式
    try:
        target_id = int(user_input)
    except:
        print("输入不合法,请输入数字或者finished")
        exit()
    # 校验ID是否存在
    if target_id not in id_data_map:
        print(f"未找到ID为{target_id}的记录")
        exit()
    
    float_val, origin_tag = id_data_map[target_id]
    # 按需求转换属性标签
    converted_tag = 'not solo' if origin_tag in ('solo', 'acc') else origin_tag
    # 计算y值
    y = math.sin(6 * float_val - 3 * math.cos(float_val))
    y_rounded = round(y, 2)

    print(f"您查询的ID {target_id} 对应结果如下:")
    print(f"转换后属性值:{converted_tag}")
    print(f"y的计算结果:{y_rounded}")

关键优化说明

  • 用with open语法自动管理文件句柄,避免资源泄漏
  • 提前过滤空行、列数不符合的行,从根源避免索引越界报错
  • 增加多层输入校验、内容合法性校验,避免各类格式报错
  • 直接按ID值匹配记录,符合需求的匹配逻辑
  • 简化属性转换、y值计算逻辑,删除冗余的无效格式转换代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03