‘list index out of range’错误解析及PDF处理代码异常排查
排查PyMuPDF代码中
list index out of range矛盾问题 核心问题分析
- 条件判断语法错误:
element[4].lower == 'product'写法错误,lower是字符串方法,必须通过element[4].lower()调用才能返回小写字符串;直接写element[4].lower得到的是方法对象,永远不可能等于字符串'product',导致大量应匹配的场景未触发。 - 临时列表未分页清空:
wList、bList、lList是全局定义的列表,在每页处理前未清空,会导致跨页数据累积,甚至重复向word_info添加内容。 - 执行时机误解:你看到的
print(word_info)输出大概率是代码正确时的调试结果,而当前运行的代码因条件错误未生成任何有效数据,word_info实际为空,访问索引时自然触发报错。
解决方法
- 修复条件判断逻辑
将错误的条件语句修正为:if element[4] == 'Features' or element[4].lower() == 'product': - 分页清空临时列表
在每页循环开始时清空临时列表,避免跨页数据干扰:for page in range(pages): wList.clear() bList.clear() lList.clear() print(f'page:{page}') # 后续元素处理逻辑... - 添加空值判断避免索引报错
在访问word_info元素前先判断列表是否为空:if word_info: print(word_info[0][0]) else: print("word_info为空,无数据可访问") - 优化内部循环逻辑(可选)
去掉冗余的计数器,直接通过索引切片获取后续元素,提升代码效率和可读性: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
相关产品推荐
相关产品推荐

