【Python自學】try/except自動偵測錯誤機制的使用方法

try / except 是 Python 中非常重要的錯誤處理機制。它可以讓程式在遇到錯誤時,不會直接中斷,而是改成執行我們預先設計好的處理方式。

📘 Python 自學|偵錯機制 try / except

🧭 try / except 是什麼?

在寫程式時,我們常常會遇到「預期以外」的情況。

例如我們希望使用者輸入整數,但使用者可能輸入:

  • abc
  • 0.05
  • 空白內容
  • 其他無法轉換成整數的資料

如果程式沒有處理這些錯誤,就可能直接報錯並停止執行。

try / except 的功能就是:
先嘗試執行某段程式,如果發生指定錯誤,就改去執行錯誤處理區塊。

⚠️ 為什麼需要 try / except?

先來看一個常見情境:我們希望使用者輸入數字。

x = int(input("請輸入數字:"))

如果使用者真的輸入整數,例如 10,程式可以正常執行。

但如果使用者輸入 abc,Python 就會出現錯誤。

請輸入數字:abc ValueError: invalid literal for int() with base 10: 'abc'

這個錯誤的意思是:abc 不能被轉換成整數。

如果沒有使用錯誤處理,程式遇到這種錯誤後就會直接中斷。
對使用者來說,體驗會很差;對程式來說,也不夠穩定。

因此,我們會使用 try / except,讓程式即使遇到錯誤,也能顯示友善提示,而不是直接崩潰。

🧪 try / except 基本語法

try / except 的基本語法如下:

try: # 嘗試執行這段程式 except 錯誤種類: # 如果發生指定錯誤,就執行這裡的程式

可以把它想成:

  • try:先試著執行看看。
  • except:如果發生錯誤,就改做這件事。

基本範例:處理輸入錯誤

try: num = int(input("請輸入數字:")) print("你的數字是:", num) except ValueError: print("輸入錯誤!請輸入數字喔~")

程式說明

這段程式會先嘗試執行 try 裡面的內容。

  • 如果使用者輸入 123,程式會正常印出數字。
  • 如果使用者輸入 abc,會發生 ValueError
  • 發生 ValueError 時,程式會跳到 except ValueError 區塊。
可以簡單理解成:
while 迴圈的開關是「條件是否成立」;try / except 的開關是「程式是否發生錯誤」。

🧩 多重錯誤處理

有時候一段程式可能會發生不只一種錯誤,這時候可以使用多個 except 來分別處理。

try: x = int(input("請輸入分母:")) y = 10 / x print("結果為:", y) except ValueError: print("請輸入有效的數字!") except ZeroDivisionError: print("分母不能為 0!")

這段程式可能遇到的錯誤

  • 如果使用者輸入 abc,會發生 ValueError
  • 如果使用者輸入 0,會發生 ZeroDivisionError
  • 如果使用者輸入正常數字,例如 2,程式會印出 5.0
錯誤種類寫得越精準,程式越容易維護。
初學時不建議一開始就全部寫成 except:,因為這樣可能會把真正需要修正的錯誤也藏起來。

✅ 使用 else 與 finally

除了 tryexcept 之外,Python 的錯誤處理還可以搭配 elsefinally

1. else:沒有錯誤時才執行

else 區塊會在 try 沒有發生錯誤時執行。

try: x = int(input("請輸入數字:")) except ValueError: print("輸入錯誤!") else: print(f"你輸入的是 {x}")

執行邏輯

  • 如果輸入可以成功轉成整數,就會執行 else
  • 如果輸入不能轉成整數,就會執行 except ValueError

2. finally:不管有沒有錯誤都會執行

finally 的特色是:無論有沒有發生錯誤,都一定會執行。

它常用在清理動作,例如:

  • 關閉檔案。
  • 釋放資源。
  • 顯示程式結束訊息。
try: file = open("data.txt", "r") print(file.read()) except FileNotFoundError: print("找不到檔案!") finally: print("程式結束。")
簡單記法:
else 是「沒錯才做」;finally 是「不管怎樣都做」。

📌 常見錯誤類型

Python 有很多錯誤類型,初學時可以先熟悉以下幾種常見錯誤。

錯誤類型 常見原因 簡單例子
ValueError 輸入或轉型錯誤。 文字轉數字失敗,例如 int("abc")
ZeroDivisionError 除以零。 10 / 0
TypeError 資料型別不符合操作需求。 字串與數字直接相加。
FileNotFoundError 找不到指定檔案。 開啟不存在的 data.txt
IndexError 索引超出範圍。 清單只有 3 筆資料,卻取第 10 筆。
KeyError 字典中找不到指定的鍵。 讀取不存在的 dictionary key。

🧪 實戰練習一:安全除法

這個練習讓使用者輸入分子與分母,並避免「輸入非數字」與「除以 0」造成程式中斷。

try: a = int(input("請輸入分子:")) b = int(input("請輸入分母:")) print("結果為:", a / b) except ValueError: print("請輸入數字!") except ZeroDivisionError: print("分母不能是 0!")

可能的執行結果

請輸入分子:10 請輸入分母:2 結果為: 5.0
請輸入分子:10 請輸入分母:0 分母不能是 0!
請輸入分子:abc 請輸入數字!

🧪 實戰練習二:安全輸入驗證

接下來把 try / exceptwhile 迴圈整合起來,做出可以重複要求使用者輸入正確數值的函數。

這個範例適合用在複利計算、資料輸入、表單驗證等情境。

# 程式開始 # 複利輸入驗證邏輯 def get_positive_number(prompt, number_type=float): value = 0 while value <= 0: try: value = number_type(input(prompt)) if value <= 0: print("輸入值必須大於 0!") except ValueError: print("請輸入正確的數字格式!") return value amount = get_positive_number("請輸入本金:", float) rate = get_positive_number("請輸入利率(例如 0.05):", float) years = get_positive_number("請輸入年限:", int) print("✅ 程式成功執行!") # 程式結束

程式執行結果

請輸入本金:-1 輸入值必須大於 0! 請輸入本金:10000 請輸入利率(例如 0.05):0.05 請輸入年限:10 ✅ 程式成功執行!

程式說明

這段程式定義了一個函數 get_positive_number(),專門用來取得大於 0 的數字。

  • prompt:提示使用者輸入的文字。
  • number_type:決定要把輸入轉成 floatint
  • while value <= 0:只要輸入值小於等於 0,就會繼續要求輸入。
  • try:嘗試把輸入轉成指定的數字型別。
  • except ValueError:如果輸入格式錯誤,就顯示提示訊息。
這種寫法的好處是:
同一段輸入驗證邏輯可以重複使用,不用每個變數都重新寫一次 try / except。

🧭 try / except 執行流程整理

用表格整理 tryexceptelsefinally 的差異,會更容易記住。

語法 執行時機 用途
try 一開始先執行。 放可能會出錯的程式。
except 發生指定錯誤時執行。 捕捉錯誤並處理。
else 沒有發生錯誤時執行。 放成功後才要做的事情。
finally 不管有沒有錯誤都會執行。 常用於清理資源或結束提示。

💡 小補充:try / except 與 while 的搭配

try / except 本身是用來處理錯誤,不一定會重複要求使用者輸入。

如果希望使用者輸入錯誤後,可以再次輸入,就可以搭配 while 迴圈。

while 條件還沒達成: try: 嘗試取得輸入 except 錯誤類型: 顯示錯誤提示

這樣就能做出更完整的安全輸入流程。

簡單記法:
try / except 負責「不要讓程式壞掉」;while 負責「讓使用者重新輸入」。

✅ 重點總結

try / except 是讓 Python 程式更穩定的重要工具,尤其在處理使用者輸入、檔案讀取、資料轉型時非常實用。

  • try:嘗試執行可能會出錯的程式。
  • except:捕捉錯誤並處理,不讓程式直接崩潰。
  • else:沒有錯誤時才執行。
  • finally:無論有沒有錯誤都會執行。
  • ValueError:常見於資料轉型失敗,例如文字轉數字。
  • ZeroDivisionError:除以 0 時發生。
  • FileNotFoundError:找不到檔案時發生。
  • try / except + while:可以製作安全輸入驗證流程。
try: 嘗試執行 except: 發生錯誤時處理 else: 沒有錯誤時執行 finally: 不管怎樣都執行
最後用一句話記住:
try / except 就是 Python 的安全網,讓程式遇到錯誤時不會直接跌倒,而是優雅地站穩。

留言

這個網誌中的熱門文章

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

【新訓入伍】義務役新兵必看!入伍報到必備清單整理|2026年更新