PyPDF2 使用 3 種機(jī)制來顯示出錯的地方:

  • Log messages 是可用于事后分析的信息性消息。大多數(shù)時候,用戶可以忽略它們。它們有不同的級別,例如指示嚴(yán)重性的信息/警告/錯誤。示例是 PyPDF2 可以處理的非標(biāo)準(zhǔn)兼容 PDF 文件。

  • Warnings 是可以避免的問題,例如使用已棄用的類/函數(shù)/參數(shù)。另一個例子是缺少 PyPDF2 的功能。在這些情況下,PyPDF2 用戶應(yīng)該調(diào)整他們的代碼。警告由警告模塊發(fā)出——它們不同于日志級別的“警告”。

  • Exceptions 是 PyPDF2 用戶應(yīng)該明確處理的錯誤案例。在 strict=True 模式下,大多數(shù)具有警告級別的日志消息將成為異常。這在您可以強制用戶修復(fù)損壞的 PDF 的應(yīng)用程序中很有用。

Exceptions

如果要處理它們,則需要捕獲異常。例如,您可能希望從 PDF 中讀取文本作為搜索功能的一部分。

大多數(shù) PDF 文件不符合規(guī)范。在這種情況下,PyPDF2 需要猜測在創(chuàng)建 PDF 文件時可能會出現(xiàn)哪些類型的錯誤。

作為用戶,您可能不關(guān)心它。如果它以任何方式可讀,那么您需要文本。您可以使用 pdfminer.six 作為后備并執(zhí)行此操作:

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? 標(biāo)志啟動 Python,以便您看到所有警告。對于持續(xù)集成 (CI) 尤其如此。

Log messages

在某些情況下,日志消息可能很嘈雜。 PyPDF2 希望具有合理級別的日志消息,但您可以減少希望看到的消息類型:

import logging

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

日志記錄模塊定義了六個日志級別:

  • CRITICAL

  • ERROR

  • WARNING

  • INFO

  • DEBUG

  • NOTSET