为何出现IndexError: list index out of range错误?Python项目调试遇阻
问题分析与解决
错误原因
你遇到的IndexError是因为使用contenu.split()将整个文件内容拆分为一维列表后,按步长5遍历的逻辑存在隐患:如果文件内容的元素总数不是5的整数倍(比如最后一行有空缺、多余空白字符或空行),循环到最后一次时i+4会超出列表的索引范围。
比如假设文件末尾有一个空行,或者某行的元素数量不符合5个的预期,就会触发这个错误。
改进方案
换用逐行读取的方式处理文件,逻辑更直观,也能避免索引越界问题,同时使用Python推荐的with语句自动管理文件的打开与关闭:
with open("concours.txt", "r") as fichier, open("admis.txt", "w") as fichier2: for line in fichier: # 去除行首尾的空白字符(换行、空格等) cleaned_line = line.strip() # 跳过空行 if not cleaned_line: continue # 将行拆分为元素列表 parts = cleaned_line.split() # 判断最后一个元素是否为'admis' if parts[-1] == "admis": # 直接写入原行,保留原有格式 fichier2.write(line)
为什么这个方案更好
- 避免索引越界:逐行处理时,每行单独拆分,不会因为全局元素总数不规整导致索引错误;
- 格式保留:直接写入原行,能保留文件中原本的空格分隔格式,而不是手动拼接成单一空格分隔的内容;
- 资源安全:
with语句会自动关闭文件,无需手动调用close(),避免因忘记关闭文件导致的资源泄漏。
原代码的其他问题
原代码中写入文件时的"+" "是语法错误,应该替换为"\n"来实现换行,但使用上述逐行写入的方式可以完全避免这个问题。
内容的提问来源于stack exchange,提问作者Loran
相关产品推荐
相关产品推荐

