Python代码出现IndexError: list index out of range错误求修复
修复处理cars.txt时的IndexError错误
问题场景
运行处理cars.txt的Python代码时触发IndexError: list index out of range,错误位于第17行car[detail] = car_details[i].split("-")[j]。
原代码
carFile = open("cars.txt", "r") file_data = carFile.read() carFile.close() car_details_name = file_data.split("\n")[0].split("-") car_details = file_data.split("\n")[1:] cars = [] no_of_cars = len(car_details) for i in range(no_of_cars): car = dict() for j, detail in enumerate(car_details_name): car[detail] = car_details[i].split("-")[j] car["car_price"] = str(int(car["selling_price"]) - int(car["discount"]) + int(car["tax"])) car["car_type"] = "LUXURY" if int(car["car_price"])>=8000 else "CONVENIENCE" cars.append(car) car_details_name.append('car_price') car_details_name.append('car_type') for i in range(no_of_cars): print(cars[i]) print("\n") processedCarFile = open("processedcars.txt", "w") luxuryCarFile = open("luxurycars.txt", "w") convenienceCarFile = open("conveniencecars.txt", "w") processedCarFile.write(" - ".join(car_details_name) + "\n") luxuryCarFile.write(" - ".join(car_details_name) + "\n") convenienceCarFile.write(" - ".join(car_details_name) + "\n") for car in cars: processedCarFile.write(" - ".join(list(car.values())) + "\n") if car["car_type"]=="LUXURY": luxuryCarFile.write(" - ".join(list(car.values())) + "\n") else: convenienceCarFile.write(" - ".join(list(car.values())) + "\n") processedCarFile.close() luxuryCarFile.close() convenienceCarFile.close()
cars.txt内容
car_model_number-car_manufacturer-tax-selling_price-discount 15AB83FUFBFU8-Maruti Suzuki-1000-7000-500 54GDG8FHNJVFV-Tata-800-7200-800 FRF84R99NKFNF-Mahindra-1000-8000-1200 HFD748BF4FJBF-Hyundai-750-11000-1750
错误栈
IndexError Traceback (most recent call last) Cell In[1], line 17 15 car = dict() 16 for j, detail in enumerate(car_details_name): ---> 17 car[detail] = car_details[i].split("-")[j] 19 car["car_price"] = str(int(car["selling_price"]) - int(car["discount"]) + int(car["tax"])) 21 car["car_type"] = "LUXURY" if int(car["car_price"])>=8000 else "CONVENIENCE" IndexError: list index out of range
错误原因
当读取文件后用split("\n")拆分时,若文件末尾存在空行(或读取内容最后带换行符),car_details = file_data.split("\n")[1:]会包含空字符串元素。循环到该空元素时,split("-")返回空列表,访问索引j就会触发索引越界错误。
修复方案
1. 过滤空行
生成car_details时,过滤掉空行和空白行,避免处理无效内容:
car_details = [line for line in file_data.split("\n")[1:] if line.strip()]
2. 优化文件操作(可选)
使用with语句自动管理文件关闭,避免资源泄漏,代码更简洁安全:
with open("cars.txt", "r") as carFile: file_data = carFile.read()
3. 优化循环逻辑(可选)
提前拆分当前行的字段,避免重复调用split("-"),提升运行效率:
for line in car_details: car = dict() fields = line.split("-") for j, detail in enumerate(car_details_name): car[detail] = fields[j] # 后续计算和判断逻辑不变
完整修复后的代码
# 用with语句安全读取文件 with open("cars.txt", "r") as carFile: file_data = carFile.read() car_details_name = file_data.split("\n")[0].split("-") # 过滤空行,避免处理无效内容 car_details = [line for line in file_data.split("\n")[1:] if line.strip()] cars = [] for line in car_details: car = dict() fields = line.split("-") for j, detail in enumerate(car_details_name): car[detail] = fields[j] # 计算实际车价 car["car_price"] = str(int(car["selling_price"]) - int(car["discount"]) + int(car["tax"])) # 判断车型 car["car_type"] = "LUXURY" if int(car["car_price"]) >= 8000 else "CONVENIENCE" cars.append(car) car_details_name.append('car_price') car_details_name.append('car_type') # 打印结果 for car in cars: print(car) print("\n") # 用with语句管理输出文件,自动关闭 with open("processedcars.txt", "w") as processedCarFile, \ open("luxurycars.txt", "w") as luxuryCarFile, \ open("conveniencecars.txt", "w") as convenienceCarFile: header = " - ".join(car_details_name) + "\n" processedCarFile.write(header) luxuryCarFile.write(header) convenienceCarFile.write(header) for car in cars: line = " - ".join(list(car.values())) + "\n" processedCarFile.write(line) if car["car_type"] == "LUXURY": luxuryCarFile.write(line) else: convenienceCarFile.write(line)
内容的提问来源于stack exchange,提问作者Jawaher Al_makhmari
相关产品推荐
相关产品推荐

