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

Python中IndexError: list out of range报错的排查解决求助

搞定IndexError的几个实用办法

1. 先过滤空行,从根源解决空列表问题

你控制台里的空列表,就是文本里的空行导致的——空行用split()处理后就是空列表[]。读取文件时直接跳过这些空行就行:

# 只保留非空行的分割结果
data: list[list[str]] = [line.split() for line in fh if line.strip()]

这样data里就不会出现空列表,后续循环也不会踩空。

2. 别手动算循环范围,直接遍历更安全

你原来的循环写法有两个坑:

  • rangeOne = len(data) -1然后for i in range(rangeOne),会漏掉最后一行,因为range(len(data)-1)只到倒数第二行的索引;
  • rangeTwo = len(data[i]) -1再for v in range(rangeTwo),会漏掉当前行的最后一个元素。

换成直接遍历元素,用enumerate还能顺便拿到索引,省心又安全:

for row in data:
    for idx, word in enumerate(row):
        if word == "Kompletter":
            # 这里写你的处理逻辑,比如要拿下一个元素的话,先判断有没有
            if idx + 1 < len(row):
                next_word = row[idx+1]
                # 执行你的操作

3. 非要用索引循环?那得改对范围

如果习惯用索引遍历,也得把循环范围写对:

for i in range(len(data)):  # 直接遍历所有行的索引,不要减1
    row = data[i]
    for v in range(len(row)):  # 遍历当前行所有元素的索引,不用减1
        if row[v] == "Kompletter":
            # 后续逻辑

这样就能覆盖所有元素,不会出现越界。

4. 别折腾字典了,二维列表才是正确选择

你试的data = {line.split() for line in fh}是创建集合,但列表不能当集合元素(因为不可哈希),运行起来直接报错,而且集合是无序去重的,完全不适合存每行的分割数据,老老实实用二维列表就行。

完整可运行示例

with open("你的文件名.txt", "r", encoding="utf-8") as fh:
    data = [line.split() for line in fh if line.strip()]

# 搜索关键词
for row_num, row in enumerate(data, start=1):  # start=1让行号从1开始,更直观
    for word_num, word in enumerate(row, start=1):
        if word == "Kompletter":
            print(f"在第{row_num}行第{word_num}个位置找到关键词")
            if word_num < len(row):
                print(f"后面跟着的是:{row[word_num]}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:15:23