Python读取文本指定行触发IndexError列表索引越界错误如何解决
问题根因
- return语句错误放在for循环内部:第一次循环遍历到第一行内容、添加到
list_1后就直接执行返回逻辑,此时list_1仅包含1个元素,仅支持索引0,传入大于等于1的索引参数就会触发越界错误 - 冗余代码
line.index(line)无实际作用,可直接删除 - 未做文件资源释放、索引合法性校验,存在其他潜在异常风险
- 路径变量名
my_patch为拼写错误,正确应为my_path
修复后的代码
import os def list_pip(n): my_path = "sort.txt" # 先判断文件是否存在且非空 if not os.path.exists(my_path) or os.path.getsize(my_path) <= 0: return "" # 用with上下文管理器自动关闭文件,避免资源泄漏 with open(my_path, 'r', encoding='utf-8') as f: list_1 = [line.strip() for line in f.readlines()] # 索引合法性校验,避免越界 if 0 <= n < len(list_1): return list_1[n] else: return f"索引{n}超出范围,文件共{len(list_1)}行"
改动说明
- 将return逻辑移出for循环,等所有行读取完毕存入列表后再执行返回逻辑
- 用列表推导式简化行内容读取代码,
strip()方法可去除每行末尾的换行符,可根据需求决定是否保留 - 新增文件存在性、索引合法性校验,覆盖更多异常场景
- 修复路径变量拼写错误
内容的提问来源于stack exchange,提问作者Eugene Saitamovich
相关产品推荐
相关产品推荐

