使用 Python 中的除錯資訊記錄錯誤

Najwa Riyaz 2023年1月30日
  1. 在 Python 中使用 exception() 方法記錄帶有詳細除錯資訊的錯誤
  2. 使用帶有 stack_infoexception() 方法在 Python 3.2+ 中記錄帶有詳細除錯資訊的錯誤
  3. 在 Python 3.5+ 中使用帶有 exc_infoexception() 方法記錄帶有詳細除錯資訊的錯誤
使用 Python 中的除錯資訊記錄錯誤

本文介紹瞭如何在 Python 中使用詳細的除錯資訊記錄錯誤。

要顯示詳細的除錯資訊,請在 Python 中匯入 logging 庫並使用 logging.exception() 方法。它將顯示錯誤訊息和堆疊跟蹤。

我們知道異常字串將幫助你瞭解 Python 中發生的確切錯誤。除此之外,我們可以確定有關異常和生成異常的程式碼行的詳細資訊。

except 程式碼塊中呼叫 logging.exception() 方法;這有助於顯示帶有錯誤訊息的堆疊跟蹤。在這個記錄器上,它記錄了級別為 ERROR 的訊息。異常資訊附加到日誌訊息中。

在 Python 中使用 exception() 方法記錄帶有詳細除錯資訊的錯誤

這是一個示例,演示瞭如何在 Python 中記錄帶有詳細除錯資訊的錯誤。

import logging


def fnc_divide(n):
    try:
        result = n / 0
        print("The result=", result)

    except:
        print("The except block")
        logging.exception("The detailed error message -")


fnc_divide(5)

輸出:

The except block
ERROR:root:The detailed error message -
Traceback (most recent call last):
  File "C:/Users/../a.py", line 4, in fnc_divide
    result=n/0
ZeroDivisionError: division by zero

請注意,在輸出中,顯示了有關錯誤的詳細資訊,如下所示。

  • 它提到了發生錯誤的模組/功能。在此示例中,輸出顯示錯誤發生在 fnc_divide() 方法中。
  • 它提到了發生錯誤的行號。在此示例中,輸出顯示錯誤發生在第 4 行。
  • 它提到了確切的錯誤。在這個例子中,它是 ZeroDivisionError: division by zero

使用帶有 stack_infoexception() 方法在 Python 3.2+ 中記錄帶有詳細除錯資訊的錯誤

從 Python 3.2+ 開始,你可以將 stack_info 引數作為 True 傳遞。它顯示了你如何到達程式碼中的特定點;這也是沒有引發異常的情況。

如果 stack_infoTrue,堆疊資訊將新增到日誌訊息中,加上實際的日誌呼叫,並按順序與堆疊幀相關聯。順序是從堆疊底部到當前執行緒中的日誌記錄呼叫。

看看下面的這個示例程式碼。

import logging


def fnc_dividestack(n):
    try:
        result = n / 0
    except Exception:
        logging.exception("The detailed error message -", stack_info=True)


fnc_dividestack(4)

輸出:

ERROR:root:The detailed error message -
Traceback (most recent call last):
  File "C:/Users/Ri..error.py", line 5, in fnc_dividestack
    result=n/0
ZeroDivisionError: division by zero
Stack (most recent call last):
  File "C:/Users/Ri..error.py", line 9, in <module>
    fnc_dividestack(4)
  File "C:/Users/Ri..error.py", line 7, in fnc_dividestack
    logging.exception("The detailed error message -", stack_info=True)

在 Python 3.5+ 中使用帶有 exc_infoexception() 方法記錄帶有詳細除錯資訊的錯誤

從 Python 3.5+ 開始,你可以在 exc_info 引數中傳遞異常例項。此引數接受異常例項。

請注意,如果發生異常,exc_info 元組儲存當前的異常資訊;否則,它的值為 None。下面是演示此過程的示例。

import logging


def fnc_divide(n):
    try:
        result = n / 0
        print("The result=", result)

    except Exception as e:
        logging.exception("The exc_info - Zero Division error", exc_info=e)


fnc_divide(5)

輸出:

ERROR:root:The exc_info - Zero Division error
Traceback (most recent call last):
  File "C:/Users/R..ror.py", line 4, in fnc_divide
    result=n/0
ZeroDivisionError: division by zero

相關文章 - Python Logging