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

Python读取文本文件加载数据时报List Index out of Range Error问题咨询

问题解决办法

报错根因

List Index out of Range Error 本质是你调用split(', ')拆分每行得到的fields列表长度不足4,仅第一个元素(ID)存在,访问下标1/2/3时触发越界。常见触发场景如下:

  • 读取的行首尾存在冗余空白字符(换行符\n、回车符\r、前后空格等),未清理就直接拆分
  • 文件存在空行(中间空白行、末尾空行),拆分后得到的列表仅包含空字符串
  • 部分行的分隔符不符合预期:比如字段间只有逗号没有空格、逗号加多个空格、误输入制表符等
  • 个别行本身缺失字段,原始数据不完整

修复方案

无需引入第三方库,只要增加行预处理、长度校验逻辑即可,修改后代码如下:

def load_customers(self):
    # 建议指定编码避免乱码,可根据实际文件编码调整
    file = open('customers.txt', 'r', encoding='utf-8')
    i = 0
    line = file.readline()
    while line != "":
        # 先清理行首尾的所有空白字符
        cleaned_line = line.strip()
        # 直接跳过空行
        if not cleaned_line:
            line = file.readline()
            continue
        fields = cleaned_line.split(', ')
        # 校验字段长度是否符合要求,提前避免越界
        if len(fields) < 4:
            # 可临时打开下方注释打印问题行,方便排查原始数据错误
            # print(f"跳过无效行:{cleaned_line},字段数不足4")
            line = file.readline()
            continue
        # 增加格式转换异常捕获,避免数字字段格式错误导致程序终止
        try:
            ID = fields[0]        
            name = fields[1]
            rate = float(fields[2])
            value = float(fields[3])
            self.add_record(ID,name,rate,value)
            i += 1
        except ValueError:
            # 可临时打开下方注释打印格式错误行
            # print(f"跳过格式错误行:{cleaned_line},数字字段无法转换")
            pass
        line = file.readline()
    file.close()
    return i

额外排查建议

如果调整后仍有部分行无法读取,可以临时打开代码里的打印注释,定位出问题的行,检查对应行的分隔符、字段格式是否符合预期。如果是分隔符不统一的问题,可以先把所有逗号替换成逗号加空格,再去重多余空格,保证分隔符统一后再拆分即可,示例如下:
cleaned_line = cleaned_line.replace(',', ', ').replace(', ', ', ')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:09:03