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

