【Python自學】try/except自動偵測錯誤機制的使用方法
📘 Python 自學|偵錯機制 try / except
🧭 try / except 是什麼?
在寫程式時,我們常常會遇到「預期以外」的情況。
例如我們希望使用者輸入整數,但使用者可能輸入:
- abc
- 0.05
- 空白內容
- 其他無法轉換成整數的資料
如果程式沒有處理這些錯誤,就可能直接報錯並停止執行。
先嘗試執行某段程式,如果發生指定錯誤,就改去執行錯誤處理區塊。
⚠️ 為什麼需要 try / except?
先來看一個常見情境:我們希望使用者輸入數字。
如果使用者真的輸入整數,例如 10,程式可以正常執行。
但如果使用者輸入 abc,Python 就會出現錯誤。
這個錯誤的意思是:abc 不能被轉換成整數。
對使用者來說,體驗會很差;對程式來說,也不夠穩定。
因此,我們會使用 try / except,讓程式即使遇到錯誤,也能顯示友善提示,而不是直接崩潰。
🧪 try / except 基本語法
try / except 的基本語法如下:
可以把它想成:
- try:先試著執行看看。
- except:如果發生錯誤,就改做這件事。
基本範例:處理輸入錯誤
程式說明
這段程式會先嘗試執行 try 裡面的內容。
- 如果使用者輸入 123,程式會正常印出數字。
- 如果使用者輸入 abc,會發生 ValueError。
- 發生 ValueError 時,程式會跳到 except ValueError 區塊。
while 迴圈的開關是「條件是否成立」;try / except 的開關是「程式是否發生錯誤」。
🧩 多重錯誤處理
有時候一段程式可能會發生不只一種錯誤,這時候可以使用多個 except 來分別處理。
這段程式可能遇到的錯誤
- 如果使用者輸入 abc,會發生 ValueError。
- 如果使用者輸入 0,會發生 ZeroDivisionError。
- 如果使用者輸入正常數字,例如 2,程式會印出 5.0。
初學時不建議一開始就全部寫成 except:,因為這樣可能會把真正需要修正的錯誤也藏起來。
✅ 使用 else 與 finally
除了 try 和 except 之外,Python 的錯誤處理還可以搭配 else 與 finally。
1. else:沒有錯誤時才執行
else 區塊會在 try 沒有發生錯誤時執行。
執行邏輯
- 如果輸入可以成功轉成整數,就會執行 else。
- 如果輸入不能轉成整數,就會執行 except ValueError。
2. finally:不管有沒有錯誤都會執行
finally 的特色是:無論有沒有發生錯誤,都一定會執行。
它常用在清理動作,例如:
- 關閉檔案。
- 釋放資源。
- 顯示程式結束訊息。
else 是「沒錯才做」;finally 是「不管怎樣都做」。
📌 常見錯誤類型
Python 有很多錯誤類型,初學時可以先熟悉以下幾種常見錯誤。
| 錯誤類型 | 常見原因 | 簡單例子 |
|---|---|---|
| ValueError | 輸入或轉型錯誤。 | 文字轉數字失敗,例如 int("abc")。 |
| ZeroDivisionError | 除以零。 | 10 / 0 |
| TypeError | 資料型別不符合操作需求。 | 字串與數字直接相加。 |
| FileNotFoundError | 找不到指定檔案。 | 開啟不存在的 data.txt。 |
| IndexError | 索引超出範圍。 | 清單只有 3 筆資料,卻取第 10 筆。 |
| KeyError | 字典中找不到指定的鍵。 | 讀取不存在的 dictionary key。 |
🧪 實戰練習一:安全除法
這個練習讓使用者輸入分子與分母,並避免「輸入非數字」與「除以 0」造成程式中斷。
可能的執行結果
🧪 實戰練習二:安全輸入驗證
接下來把 try / except 和 while 迴圈整合起來,做出可以重複要求使用者輸入正確數值的函數。
這個範例適合用在複利計算、資料輸入、表單驗證等情境。
程式執行結果
程式說明
這段程式定義了一個函數 get_positive_number(),專門用來取得大於 0 的數字。
- prompt:提示使用者輸入的文字。
- number_type:決定要把輸入轉成 float 或 int。
- while value <= 0:只要輸入值小於等於 0,就會繼續要求輸入。
- try:嘗試把輸入轉成指定的數字型別。
- except ValueError:如果輸入格式錯誤,就顯示提示訊息。
同一段輸入驗證邏輯可以重複使用,不用每個變數都重新寫一次 try / except。
🧭 try / except 執行流程整理
用表格整理 try、except、else、finally 的差異,會更容易記住。
| 語法 | 執行時機 | 用途 |
|---|---|---|
| try | 一開始先執行。 | 放可能會出錯的程式。 |
| except | 發生指定錯誤時執行。 | 捕捉錯誤並處理。 |
| else | 沒有發生錯誤時執行。 | 放成功後才要做的事情。 |
| finally | 不管有沒有錯誤都會執行。 | 常用於清理資源或結束提示。 |
💡 小補充:try / except 與 while 的搭配
try / except 本身是用來處理錯誤,不一定會重複要求使用者輸入。
如果希望使用者輸入錯誤後,可以再次輸入,就可以搭配 while 迴圈。
這樣就能做出更完整的安全輸入流程。
try / except 負責「不要讓程式壞掉」;while 負責「讓使用者重新輸入」。
✅ 重點總結
try / except 是讓 Python 程式更穩定的重要工具,尤其在處理使用者輸入、檔案讀取、資料轉型時非常實用。
- try:嘗試執行可能會出錯的程式。
- except:捕捉錯誤並處理,不讓程式直接崩潰。
- else:沒有錯誤時才執行。
- finally:無論有沒有錯誤都會執行。
- ValueError:常見於資料轉型失敗,例如文字轉數字。
- ZeroDivisionError:除以 0 時發生。
- FileNotFoundError:找不到檔案時發生。
- try / except + while:可以製作安全輸入驗證流程。
try / except 就是 Python 的安全網,讓程式遇到錯誤時不會直接跌倒,而是優雅地站穩。
留言
張貼留言