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

Python 2.7读取文件与字典对比时报错:IndexError: list index out of range

解决水果发放程序中的IndexError问题

老兄,你遇到的IndexError: list index out of range问题,大概率是因为你遍历的某个用户记录子列表不完整,导致你访问索引[1](也就是水果名称)的时候,这个子列表根本没有第二个元素。

问题根源分析

从你给出的文件内容示例来看,里面有个记录写了"Pineapp... ",很可能原始文件里存在截断的记录,或者某条记录只有用户姓名、没带水果名称(比如像["Deborah Garcia"]这种只有1个元素的列表)。当你的代码试图访问record[1]时,自然就会因为索引超出列表长度报错。

解决方案:先校验记录完整性,再处理逻辑

我给你整理了修改后的代码,核心思路是先检查每个子列表的长度是否符合要求,再去读取水果名称和对比库存:

# 假设你的库存字典是这样的
fruit_stock = {"Bananas": 5, "Pears": 0, "Pineapples": 3}

# 读取文件解析后的用户-水果列表(模拟你实际的读取结果)
user_fruit_list = [
    ["James Bruce", "Bananas"],
    ["Katherine Newton", "Bananas"],
    ["Deborah Garcia"],  # 这条就是有问题的记录
    ["Marguerite Kozlowski", "Pineapples"]
]

for record in user_fruit_list:
    # 第一步:先检查记录是否完整,必须包含姓名和水果两个元素
    if len(record) != 2:
        print(f"⚠️  警告:记录 {record} 格式错误,跳过处理")
        continue
    
    # 解包姓名和水果,比直接用索引更清晰
    user_name, requested_fruit = record
    
    # 获取对应水果的库存,没有的话默认0
    current_stock = fruit_stock.get(requested_fruit, 0)
    
    if current_stock > 0:
        print(f"✅  已发放{requested_fruit}给{user_name}")
        # 可选:发放后扣减库存
        # fruit_stock[requested_fruit] -= 1
    else:
        print(f"❌  未发放{requested_fruit}给{user_name}(库存不足或无此水果)")

额外排查建议

  • 检查原始文件:打开你的数据文件,确认所有记录都是完整的["姓名", "水果"]格式,没有截断、换行错误或者缺失元素的情况。
  • 打印调试:在遍历前先打印user_fruit_list,看看里面有没有长度异常的子列表,快速定位问题记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:10:46