使用PyPDF2提取PDF文本时遇AttributeError报错求助
PyPDF2 extractText() 报错 'NoneType' object has no attribute 'strict' 的解决办法
问题原因
从报错栈能看出,在解析PDF内容流时,readObject函数传入的pdf参数是None,后续代码试图访问pdf.strict属性触发了AttributeError。这类问题属于PyPDF2对部分特殊PDF结构的兼容缺陷,即便PDF本身能正常选中文本,PyPDF2的解析逻辑也没处理好这种情况。
解决方案
1. 调整PyPDF2的strict模式
打开PDF时禁用严格模式,多数情况下能绕过这类兼容性问题:
from PyPDF2 import PdfReader # 打开PDF时设置strict=False reader = PdfReader("目标文件.pdf", strict=False) page = reader.pages[0] try: text = page.extract_text() print(text) except Exception as e: print(f"提取失败: {e}")
2. 更新或降级PyPDF2版本
这个bug在PyPDF2的部分版本中存在,尝试升级到最新稳定版,或者降级到已知兼容的版本(比如2.10.5版本):
# 升级到最新版 pip install --upgrade pypdf2 # 或者降级到指定版本 pip install pypdf2==2.10.5
3. 替换为更稳定的PDF文本提取库
如果PyPDF2始终无法解决问题,换成PyMuPDF(fitz),它对各种PDF结构的兼容性更好:
import fitz # 需要先安装:pip install pymupdf doc = fitz.open("目标文件.pdf") full_text = "" for page in doc: full_text += page.get_text() doc.close() print(full_text)
4. 临时修复PyPDF2源码(不推荐)
如果不想换库,找到Python安装目录下的PyPDF2/generic.py文件,定位到readFromStream方法的对应行,把原代码:
elif pdf.strict:
修改为:
elif pdf is not None and pdf.strict:
这样会先判断pdf是否为None,避免触发属性错误。
内容的提问来源于stack exchange,提问作者Nathan Roberts
相关产品推荐
相关产品推荐

