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
相关产品推荐
相关产品推荐

