使用 Python 中的除錯資訊記錄錯誤
Najwa Riyaz
2023年1月30日
-
在 Python 中使用
exception()
方法記錄帶有詳細除錯資訊的錯誤 -
使用帶有
stack_info
的exception()
方法在 Python 3.2+ 中記錄帶有詳細除錯資訊的錯誤 -
在 Python 3.5+ 中使用帶有
exc_info
的exception()
方法記錄帶有詳細除錯資訊的錯誤
本文介紹瞭如何在 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_info
的 exception()
方法在 Python 3.2+ 中記錄帶有詳細除錯資訊的錯誤
從 Python 3.2+ 開始,你可以將 stack_info
引數作為 True
傳遞。它顯示了你如何到達程式碼中的特定點;這也是沒有引發異常的情況。
如果 stack_info
是 True
,堆疊資訊將新增到日誌訊息中,加上實際的日誌呼叫,並按順序與堆疊幀相關聯。順序是從堆疊底部到當前執行緒中的日誌記錄呼叫。
看看下面的這個示例程式碼。
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_info
的 exception()
方法記錄帶有詳細除錯資訊的錯誤
從 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