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

‘list index out of range’错误解析及PDF处理代码异常排查

排查PyMuPDF代码中list index out of range矛盾问题

核心问题分析

  1. 条件判断语法错误:element[4].lower == 'product'写法错误,lower是字符串方法,必须通过element[4].lower()调用才能返回小写字符串;直接写element[4].lower得到的是方法对象,永远不可能等于字符串'product',导致大量应匹配的场景未触发。
  2. 临时列表未分页清空:wList、bList、lList是全局定义的列表,在每页处理前未清空,会导致跨页数据累积,甚至重复向word_info添加内容。
  3. 执行时机误解:你看到的print(word_info)输出大概率是代码正确时的调试结果,而当前运行的代码因条件错误未生成任何有效数据,word_info实际为空,访问索引时自然触发报错。

解决方法

  1. 修复条件判断逻辑
    将错误的条件语句修正为:
    if element[4] == 'Features' or element[4].lower() == 'product':
    
  2. 分页清空临时列表
    在每页循环开始时清空临时列表,避免跨页数据干扰:
    for page in range(pages):
        wList.clear()
        bList.clear()
        lList.clear()
        print(f'page:{page}')
        # 后续元素处理逻辑...
    
  3. 添加空值判断避免索引报错
    在访问word_info元素前先判断列表是否为空:
    if word_info:
        print(word_info[0][0])
    else:
        print("word_info为空,无数据可访问")
    
  4. 优化内部循环逻辑(可选)
    去掉冗余的计数器,直接通过索引切片获取后续元素,提升代码效率和可读性:
    for page in range(pages):
        wList.clear()
        bList.clear()
        lList.clear()
        print(f'page:{page}')
        words = doc[page].get_text("words")  # 提前获取整页word数据
        for idx, element in enumerate(words):
            print(element)
            if element[4] == 'Features' or element[4].lower() == 'product':
                # 直接取当前元素之后的所有word
                for element_1 in words[idx+1:]:
                    wList.append(element_1[word])
                    bList.append(element_1[block])
                    lList.append(element_1[line])
        # 后续word_info拼接逻辑...
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:00:11