iT邦幫忙

2024 iThome 鐵人賽

DAY 22
1
自我挑戰組

每日挑戰:從零開始的 Python 學習之旅系列 第 22

【Day 22】錯誤和例外狀況篇 - 續集

  • 分享至 

  • xImage
  •  

Hi 大家好,

今天要開始介紹Python中的錯誤和例外狀況篇之續集,那我們開始吧!

堆疊追蹤 (Stack Trace)

  • 在程式發生錯誤時,用來描述程式執行到發生錯誤位置,可以呼叫相對應的函數進一步追蹤錯誤發生在哪個函數或哪一行程式碼。

traceback.print_exc()

  • 未使用traceback,可以自訂錯誤訊息內容
def func():
    try:
        1 / 0
    except ZeroDivisionError:
        print("發生了除以零的錯誤:")

func()
PS D:\Project\practice> python hi.py
發生了除以零的錯誤:
PS D:\Project\practice>
  • 使用traceback,會將完整的堆疊追蹤印出來,顯示程式在發生錯誤時的詳細資訊,這對於除錯很有幫助
  • 需要匯入traceback模組
import traceback

def func():
    try:
        1 / 0
    except ZeroDivisionError:
        print("發生了除以零的錯誤:")
        traceback.print_exc()

func()
PS D:\Project\practice> python hi.py
發生了除以零的錯誤:
Traceback (most recent call last):
  File "D:\Project\practice\hi.py", line 5, in func
    1 / 0
    ~~^~~
ZeroDivisionError: division by zero
PS D:\Project\practice>

sys.exc_info()

  • 此方法會返回一個包含錯誤類型錯誤訊息堆疊追蹤的資訊。這讓你可以更靈活地處理錯誤訊息,例如在捕獲錯誤後可以自己決定如何顯示或記錄錯誤訊息
  • 需要匯入sys模組
import sys

def func():
    try:
        int("hello world")
    except ValueError:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print(f"錯誤類型: {exc_type}")
        print(f"錯誤訊息: {exc_value}")
        print(f"堆疊追蹤: {exc_traceback}")

func()
PS D:\Project\practice> python hi.py
錯誤類型: <class 'ValueError'>
錯誤訊息: invalid literal for int() with base 10: 'hello world'
堆疊追蹤: <traceback object at 0x000001FD9C745900>
PS D:\Project\practice>

sys.excepthook()

  • 這是一個全局的錯誤捕捉鉤子(hook),當未捕獲的例外發生時會自動調用自行定義的sys.excepthook(),顯示你自行定義的錯誤資訊內容,或是控制未捕獲例外的行為
  • 需要匯入sys模組
import sys

def custom_excepthook(exc_type, exc_value, exc_traceback):
    print(f"自訂錯誤處理 - 錯誤類型: {exc_type}")
    print(f"自訂錯誤處理 - 錯誤訊息: {exc_value}")

sys.excepthook = custom_excepthook

def func():
    raise ValueError("這是我自己定義的錯誤訊息")

func()
PS D:\Project\practice> python hi.py
自訂錯誤處理 - 錯誤類型: <class 'ValueError'>
自訂錯誤處理 - 錯誤訊息: 這是我自己定義的錯誤訊息
PS D:\Project\practice>

提出警告訊息 (Warnings)

  • 用來發出警告訊息,通常用來提醒使用者某些功能已過時或即將要被拋棄使用。這方式並不會中斷程式的執行,會直接在控制台上顯示警告訊息
  • DeprecationWarning:警告的一種類型,用來指示某些功能已被棄用。
  • 需要匯入warnings模組
import warnings

def deprecated_function():
    warnings.warn("這個功能已被棄用,請使用新方法", DeprecationWarning)

deprecated_function()
PS D:\Project\practice> python hi.py
D:\Project\practice\hi.py:4: DeprecationWarning: 這個功能已被棄用,請使用新方法
  warnings.warn("這個功能已被棄用,請使用新方法", DeprecationWarning)
PS D:\Project\practice>

那今天就介紹到這裡,我們明天見~


上一篇
【Day 21】錯誤和例外狀況篇
下一篇
【Day 23】錯誤和例外狀況篇 - 續集
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言