PyPDF2 使用 3 种机制来显示出错的地方:

  • Log messages 是可用于事后分析的信息性消息。大多数时候,用户可以忽略它们。它们有不同的级别,例如指示严重性的信息/警告/错误。示例是 PyPDF2 可以处理的非标准兼容 PDF 文件。

  • Warnings 是可以避免的问题,例如使用已弃用的类/函数/参数。另一个例子是缺少 PyPDF2 的功能。在这些情况下,PyPDF2 用户应该调整他们的代码。警告由警告模块发出——它们不同于日志级别的“警告”。

  • Exceptions 是 PyPDF2 用户应该明确处理的错误案例。在 strict=True 模式下,大多数具有警告级别的日志消息将成为异常。这在您可以强制用户修复损坏的 PDF 的应用程序中很有用。

Exceptions

如果要处理它们,则需要捕获异常。例如,您可能希望从 PDF 中读取文本作为搜索功能的一部分。

大多数 PDF 文件不符合规范。在这种情况下,PyPDF2 需要猜测在创建 PDF 文件时可能会出现哪些类型的错误。

作为用户,您可能不关心它。如果它以任何方式可读,那么您需要文本。您可以使用 pdfminer.six 作为后备并执行此操作:

from PyPDF2 import PdfReader
from pdfminer.high_level import extract_text as fallback_text_extraction

text = ""
try:
    reader = PdfReader("example.pdf")
    for page in reader.pages:
        text += page.extract_text()
except Exception as exc:
    text = fallback_text_extraction("example.pdf")

如果你喜欢更具体的东西,你也可以捕获 ​PyPDF2.errors.PyPdfError​。

Warnings

Warnings​模块允许您忽略警告:

import warnings

warnings.filterwarnings("ignore")

在许多情况下,您实际上想要使用 ​-W​ 标志启动 Python,以便您看到所有警告。对于持续集成 (CI) 尤其如此。

Log messages

在某些情况下,日志消息可能很嘈杂。 PyPDF2 希望具有合理级别的日志消息,但您可以减少希望看到的消息类型:

import logging

logger = logging.getLogger("PyPDF2")
logger.setLevel(logging.ERROR)

日志记录模块定义了六个日志级别:

  • CRITICAL

  • ERROR

  • WARNING

  • INFO

  • DEBUG

  • NOTSET