2024-05-07|閱讀時間 ‧ 約 23 分鐘

[Python]利用Traceback更好理解異常訊息

在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。

本文將利用Traceback來讓異常訊息變得更好理解。

程式範例

import traceback

def add_number(a,b):
print(a + b)

try:
add_number('0')
except Exception as e:
error_class = e.__class__.__name__ # 取得錯誤類型
detail = e.args[0] # 取得詳細內容
tb = traceback.sys.exc_info()[2] # 取得Call Stack
lastCallStack = traceback.extract_tb(tb)[-1] # 取得Call Stack的最後一筆資料
fileName = lastCallStack[0] # 取得發生的檔案名稱
lineNum = lastCallStack[1] # 取得發生的行號
funcName = lastCallStack[2] # 取得發生的函數名稱

print(f'error file : {fileName}')
print(f'error line : {lineNum}')
print(f'error function : {funcName}')
print(f'error type: {error_class}')
print(f'detail : {detail}')

整理完的異常訊息印出


未使用Traceback結果

看起來並沒有比較難讀,但是因為引入的套件不夠多,當程式碼越來越複雜時,有效的捕獲異常訊息並整理記錄,這是會在後續維護程式上有很大的幫助。


語法說明

traceback.extract_tb

提取回溯資訊中的堆疊跟蹤 (stack trace),它返回一個列表,列表中的每個元素都是一個元組,包含了文件名、行號、函式名和源代碼行。

traceback.extract_tb(tb, limit=None)
  • tb 是表示回溯 (traceback) 資訊的對象,通常可以使用 traceback.sys.exc_info()[2] 來獲取當前的回溯資訊。
  • limit 是用來限制返回的堆疊跟踪數量的參數,如果不指定,則返回所有的堆疊跟踪資訊。

堆疊跟踪資訊的元組格式為 (文件名, 行號, 函式名, 程式碼行),你可以根據需要使用這些資訊來進行進一步的處理或日誌記錄。



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.