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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:55:13