[Python教學] 中級:異常處理與錯誤處理

更新於 發佈於 閱讀時間約 6 分鐘

Python 中的錯誤處理機制十分靈活,能讓我們捕捉、管理並處理程式中可能出現的各種錯誤和異常情況。本文將深入介紹 Python 中的錯誤處理語法,包括 try-except 結構、raise 用法以及如何自訂例外類別,讓程式更具容錯性和健壯性。

1. 基本錯誤處理:try-except 語句

try-except 是 Python 錯誤處理的基本結構,可以捕捉和處理程式在執行過程中發生的例外。其基本用法如下:

try:
# 嘗試執行的程式碼
result = 10 / 0 # 故意製造錯誤
except ZeroDivisionError:
# 捕捉並處理 ZeroDivisionError 錯誤
print("不能除以零!")

主要組成部分:

  • try:放置可能會發生錯誤的程式碼。如果程式碼執行過程中遇到錯誤,Python 會立即跳至 except 區塊。
  • except:放置錯誤處理的程式碼,指定的錯誤類型可以是 Python 內建的錯誤類型或自訂錯誤類型。若不指定類型,會捕捉所有錯誤。

範例:

try:
value = int(input("請輸入數字:"))
result = 100 / value
print("結果為:", result)
except ZeroDivisionError:
print("發生錯誤:不能除以零")
except ValueError:
print("發生錯誤:輸入值不是有效的數字")

在這個範例中,我們捕捉了兩種可能的錯誤:

  • ZeroDivisionError:當除數為 0 時發生。
  • ValueError:當輸入的值無法轉換為整數時發生。

多重 except 處理

可以在一個 try 區塊內使用多個 except 子句來針對不同的錯誤做出不同的反應。

try:
num = int(input("請輸入數字:"))
result = 10 / num
except ValueError:
print("這不是一個有效的數字!")
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"發生未知錯誤:{e}")

Exception 是所有內建錯誤的基類,所以用來捕捉任何未預料的錯誤。


2. 使用 raise 主動引發例外

有時候我們需要在特定情況下主動引發例外,可以使用 raise 關鍵字來達到這個目的。當條件不符或輸入不正確時,主動拋出錯誤能夠讓程式的執行流程更安全。

語法

raise ExceptionType("錯誤訊息")

範例:檢查使用者年齡

def check_age(age):
if age < 0:
raise ValueError("年齡不能為負數")
print(f"你的年齡是:{age}")

try:
user_age = int(input("請輸入年齡:"))
check_age(user_age)
except ValueError as e:
print(f"錯誤:{e}")

在這裡,我們定義了一個 check_age 函數,如果輸入的年齡是負數,則 raise 主動拋出 ValueError 錯誤,並給出自訂錯誤訊息 "年齡不能為負數"。在 try-except 區塊中,我們捕捉到此錯誤並顯示出詳細的錯誤訊息。


3. 自訂例外類別

Python 允許我們自訂例外類別,以便對某些特定情況進行更細緻的錯誤管理。自訂例外類別能讓程式碼的可讀性提高,同時也讓我們可以針對特殊情況撰寫自定義的錯誤訊息或處理流程。

自訂例外的步驟

  1. 建立一個繼承自 Exception 的類別。
  2. 定義 __init__ 方法,用來接受錯誤訊息。
  3. 使用 raise 關鍵字來引發自訂例外。

自訂例外範例:帳戶餘額不足

class InsufficientFundsError(Exception):
def __init__(self, balance, amount):
super().__init__(f"餘額不足:目前餘額 ${balance},但嘗試提取 ${amount}")

def withdraw(balance, amount):
if amount > balance:
raise InsufficientFundsError(balance, amount)
balance -= amount
return balance

try:
account_balance = 1000
withdraw_amount = int(input("請輸入提取金額:"))
new_balance = withdraw(account_balance, withdraw_amount)
print(f"提取成功,新的餘額為:${new_balance}")
except InsufficientFundsError as e:
print(f"錯誤:{e}")

在這個範例中,我們建立了自訂例外類別 InsufficientFundsError,當提取的金額超過帳戶餘額時,便拋出此例外並顯示詳細訊息。這樣可以更加精確地處理特定的錯誤情況。


總結

  • try-except:捕捉並處理程式中可能出現的錯誤。
  • raise:主動引發例外,用於在不滿足特定條件時停止程式執行。
  • 自訂例外:針對特定情況建立自訂例外類別,提高程式碼的可讀性和錯誤處理的靈活性。

藉由掌握這些錯誤處理機制,能讓程式更具健壯性並能更精確地處理各種潛在的錯誤情況。

留言
avatar-img
留言分享你的想法!
avatar-img
追極光的北極熊|軟體工程師的小天地
12會員
163內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
2025/04/28
當我們開發程式時,功能能正常運作固然重要,但在資料量變大或執行時間變長時,效能就成為不可忽視的一環。尤其在 Web 應用、資料分析或科學運算中,程式跑得快與否,直接影響使用者體驗與系統成本。
2025/04/28
當我們開發程式時,功能能正常運作固然重要,但在資料量變大或執行時間變長時,效能就成為不可忽視的一環。尤其在 Web 應用、資料分析或科學運算中,程式跑得快與否,直接影響使用者體驗與系統成本。
2025/04/22
嘿,大家好!上篇教學文章我們做出了一個待辦事項清單,已經有點小工具的感覺了吧?今天我們要再升級,來做個「簡單記事本」。這個專案不只可以寫東西,還能存檔、讀檔,甚至換字體大小,感覺就像自己寫了個迷你軟體!
2025/04/22
嘿,大家好!上篇教學文章我們做出了一個待辦事項清單,已經有點小工具的感覺了吧?今天我們要再升級,來做個「簡單記事本」。這個專案不只可以寫東西,還能存檔、讀檔,甚至換字體大小,感覺就像自己寫了個迷你軟體!
2025/04/16
嘿,大家好!走到這一步,我們已經玩過 Tkinter 的基本招式、佈局、事件處理,還搞了些進階元件,應該有點信心了吧?今天我們要把這些功夫練成一套連招,來做個實用的「待辦事項清單」(To-Do List),順便聊聊怎麼把程式寫得更漂亮、更好用。準備好了嗎?這就上場啦!
2025/04/16
嘿,大家好!走到這一步,我們已經玩過 Tkinter 的基本招式、佈局、事件處理,還搞了些進階元件,應該有點信心了吧?今天我們要把這些功夫練成一套連招,來做個實用的「待辦事項清單」(To-Do List),順便聊聊怎麼把程式寫得更漂亮、更好用。準備好了嗎?這就上場啦!
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
本章節旨在介紹Java程式語言中的「例外處理」概念。透過各個小節,讀者將學習到何謂例外處理、為何要使用它、如何在Java中實現例外處理,以及如何正確地捕獲和處理各種類型的異常。此外,本章節還提供了如何主動觸發異常,以及如何創建和使用自定義異常的實例。
Thumbnail
本章節旨在介紹Java程式語言中的「例外處理」概念。透過各個小節,讀者將學習到何謂例外處理、為何要使用它、如何在Java中實現例外處理,以及如何正確地捕獲和處理各種類型的異常。此外,本章節還提供了如何主動觸發異常,以及如何創建和使用自定義異常的實例。
Thumbnail
這篇文章主要講解Kotlin的例外處理。內容包括例外處理的目的、`try-catch` 和 `finally` 的用法、常見的異常類型,以及如何定義和觸發自定義的異常訊息。
Thumbnail
這篇文章主要講解Kotlin的例外處理。內容包括例外處理的目的、`try-catch` 和 `finally` 的用法、常見的異常類型,以及如何定義和觸發自定義的異常訊息。
Thumbnail
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
本章節介紹C#的「例外處理」,包括使用try-catch語法處理錯誤,finally關鍵字的使用,以及如何主動引發和自定義異常。
Thumbnail
例外處理是Python中的重要概念,用於控制並處理程序異常,防止程序崩潰和數據損失。它包括try, except, else和finally等語法結構,可用於對特定錯誤進行處理,或主動觸發和自定義異常。
Thumbnail
例外處理是Python中的重要概念,用於控制並處理程序異常,防止程序崩潰和數據損失。它包括try, except, else和finally等語法結構,可用於對特定錯誤進行處理,或主動觸發和自定義異常。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
Thumbnail
例外處理 在Python中,try 和 except 是用來處理異常的關鍵字。它們讓你能夠在代碼中檢測和處理可能引發異常的情況,以確保程序在遇到問題時不會崩潰,而是能夠優雅地處理錯誤情況。 基本用法,以下是 try 和 except 的基本用法: try: # 可能引發異常的代碼 excep
Thumbnail
例外處理 在Python中,try 和 except 是用來處理異常的關鍵字。它們讓你能夠在代碼中檢測和處理可能引發異常的情況,以確保程序在遇到問題時不會崩潰,而是能夠優雅地處理錯誤情況。 基本用法,以下是 try 和 except 的基本用法: try: # 可能引發異常的代碼 excep
Thumbnail
在程式設計中,錯誤處理是一個不可或缺的部分。C#提供了強大的錯誤處理機制,讓我們能夠更有效地管理和處理程式執行中可能出現的問題。本篇文章將帶你深入了解如何在C#中捕捉與處理錯誤,確保你的程式在遇到問題時能夠優雅地回應。
Thumbnail
在程式設計中,錯誤處理是一個不可或缺的部分。C#提供了強大的錯誤處理機制,讓我們能夠更有效地管理和處理程式執行中可能出現的問題。本篇文章將帶你深入了解如何在C#中捕捉與處理錯誤,確保你的程式在遇到問題時能夠優雅地回應。
Thumbnail
本篇文章介紹了在Python中的錯誤處理機制。錯誤處理在程式設計中是一個重要環節,能夠有效處理可能發生的錯誤。示範了如何捕捉錯誤並根據不同錯誤類型進行處理或提示。此外,還介紹了指定特定錯誤類型和捕捉所有錯誤的方法。透過學習這些錯誤處理的技巧,讀者可以更好地避免程式崩潰,提供友善的使用者體驗。
Thumbnail
本篇文章介紹了在Python中的錯誤處理機制。錯誤處理在程式設計中是一個重要環節,能夠有效處理可能發生的錯誤。示範了如何捕捉錯誤並根據不同錯誤類型進行處理或提示。此外,還介紹了指定特定錯誤類型和捕捉所有錯誤的方法。透過學習這些錯誤處理的技巧,讀者可以更好地避免程式崩潰,提供友善的使用者體驗。
Thumbnail
  程式在執行的過程中難免會遇到意外的狀況發生,這時該怎麼辦呢?現實生活中我們可能就會去保保險,那麼程式怎麼辦?有一個例外處理try...catch可以幫我們解決這個問題,甚至還可以使用throw可以丟出例外,例外處理部分是可以透過程式的規劃來了解是哪邊出問題的哦!怎麼說呢?我們來看一下例子:
Thumbnail
  程式在執行的過程中難免會遇到意外的狀況發生,這時該怎麼辦呢?現實生活中我們可能就會去保保險,那麼程式怎麼辦?有一個例外處理try...catch可以幫我們解決這個問題,甚至還可以使用throw可以丟出例外,例外處理部分是可以透過程式的規劃來了解是哪邊出問題的哦!怎麼說呢?我們來看一下例子:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News