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

Python使用EasyOCR报索引越界 如何正确提取列表目标元素

EasyOCR结果提取索引越界问题修复

报错核心原因

你出现list index out of range是两个认知错误导致的:

  1. Python列表索引从0开始计数,不是从1开始。你给出的示例返回结构[([[17, 11], [57, 11], [57, 61], [17, 61]], '2', 1.0)]最外层是长度为1的列表,仅存在索引为0的元素,你直接写result[1]是访问不存在的第二个元素,必然触发越界。
  2. 对返回结构的层级理解错误:readtext()返回的列表中,每个元素是一个三元组,对应一个识别到的文本块,三元组的结构固定为:
    • 索引0:文本框四个角的坐标数组
    • 索引1:识别出的文本内容(也就是你要提取的'2')
    • 索引2:识别置信度(0-1之间,数值越高可信度越高)

另外你原代码没有做结果判空:部分图片可能识别不到任何文本,此时result是空列表,直接写死索引也会触发越界。原代码拼接结果时直接转整个result对象为字符串,也会把坐标、置信度这些无关内容拼进去。

修正后代码

单文本块提取(适配你示例中每张图只有一个数字的场景)

number = 1
sresult = ''
reader = easyocr.Reader(['en'])
for number in range(1, 82):
    result = reader.readtext(f"{datadrop}{number}.png")
    # 先判断是否识别到有效结果,避免空列表报错
    if result:
        # 取第一个识别块的文本内容:列表第0位是第一个识别块,元组第1位是文本
        target_text = result[0][1]
        print(target_text)
        sresult = target_text + sresult
    else:
        print(f"第{number}张图片未识别到有效内容")
print("最终拼接结果:\n", sresult)

多文本块提取(如果单张图可能识别到多个内容)

如果后续遇到单张图有多个文本的场景,遍历所有识别块即可,不用写死索引:

number = 1
sresult = ''
reader = easyocr.Reader(['en'])
for number in range(1, 82):
    result = reader.readtext(f"{datadrop}{number}.png")
    if result:
        for block in result:
            target_text = block[1]
            print(target_text)
            sresult = target_text + sresult
    else:
        print(f"第{number}张图片未识别到有效内容")
print("最终拼接结果:\n", sresult)

原代码错误点对照

  • 错误写法print(result[1][0]):result[1]访问不存在的第二个识别块,就算索引写对为0,[0]取到的是坐标数组,不是你要的文本。
  • 原拼接逻辑sresult = str(result) +sresult:直接把整个返回列表(包含坐标、置信度)转字符串拼接,输出会带大量无关格式内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:15:31