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

使用for循环读取文本文件时报list index out of range错误,求解决

问题分析与解决

错误原因

你的代码存在两个核心问题:

  1. readlines()调用逻辑错误:每次调用example.readlines()都会把文件指针移到文件末尾。第一次在range()里调用时,已经读取完所有行,指针到了末尾;循环里再调用example.readlines()会返回空列表,此时用[number]索引必然触发list index out of range错误。
  2. range()参数类型错误:range()需要传入整数,但example.readlines()返回的是字符串列表,这行代码本身逻辑就不成立,只是文件指针移动的问题先触发了索引错误。

修正后的代码

推荐几种简洁且正确的写法:

写法1:先读取所有行到变量再遍历

example_list = []

with open("/path/data.txt") as example:
    lines = example.readlines()  # 一次性读取所有行到变量,避免重复移动指针
    for line in lines:
        example_list.append(line.strip())  # strip()可选,用于去除每行末尾的换行符和空格

print(example_list)

写法2:列表推导式(更简洁)

with open("/path/data.txt") as example:
    example_list = [line.strip() for line in example.readlines()]

print(example_list)

写法3:直接遍历文件对象(内存更高效)

如果文件体积较大,不建议一次性读取所有行,直接遍历文件对象即可逐行读取:

example_list = []

with open("/path/data.txt") as example:
    for line in example:  # 文件对象本身支持迭代,逐行读取
        example_list.append(line.strip())

print(example_list)

为什么手动输入索引能运行?

手动输入索引时,你每次都是重新运行代码,文件句柄会重新打开,指针始终处于文件开头,所以example.readlines()每次都能返回完整的行列表。而循环里是在同一个文件句柄下操作,指针移动后无法自动回到开头(除非手动调用example.seek(0),但完全没必要这么做)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:18:30