【Python自學】try/except自動偵測錯誤機制的使用方法
Python 偵錯機制try / except
try / except 是
Python 中非常重要的錯誤處理機制,常用在使用者輸入、檔案操作時非常有用。
因為即便我們已經提醒使用者輸入條件,例如整數,他依然可能傳一個abc或者0.05給你,這時候try / except就很好用。
try / except 的用途
問題場景:使用者輸入「文字」,但你希望輸入「數字」,程式就會報錯中斷。
例如:
x =
int(input("請輸入數字:"))
➡️ 使用者輸入「abc」
ValueError: invalid literal for int() with
base 10: 'abc'
假如顯示這段代碼之後,程式就結束了,那麼使用者就要重新開啟程式。雖然這是使用者的錯誤,但是這樣體驗會很差,也於事無補。因此,我們需要有一個即便在程式錯誤的情況下也能繼續執行的代碼-try / except。
你當然可以使用while迴圈來引導使用者輸入正確的值,但是那樣寫起來太複雜!
語法結構
try:
#
嘗試執行這段程式
except 錯誤種類:
#
如果發生錯誤,就執行這裡的程式
基本範例:
try:
num = int(input("請輸入數字:"))
print("你的數字是:",
num)
except
ValueError:
print("輸入錯誤!請輸入數字喔~")
說明:
try 嘗試執行
int(input())
如果輸入「abc」,就會跳到
except ValueError 的程式區塊
其實邏輯跟迴圈有點像,只是while迴圈的運轉的開關是(條件符合);而try / except的運轉開關是(程式錯誤)。
多重錯誤處理
有時候一段程式可能有不只一種錯誤。
可以用多個 except 來處理不同狀況。
try:
x = int(input("請輸入分母:"))
y = 10 / x
print("結果為:",
y)
except
ValueError:
print("請輸入有效的數字!")
except
ZeroDivisionError:
print("分母不能為 0!")
使用 else 與 finally
else:在「沒有錯誤」時才執行
try:
x
= int(input("請輸入數字:"))
except ValueError:
print("輸入錯誤!")
else:
print(f"你輸入的是 {x}")
finally:不管有沒有錯誤,都一定會執行
else 與 finally常用在「關閉檔案」、「釋放資源」。
try:
file = open("data.txt",
"r")
print(file.read())
except
FileNotFoundError:
print("找不到檔案!")
finally:
print("程式結束。")
常見錯誤類型
ValueError
輸入或轉型錯誤(如文字轉數字失敗)
ZeroDivisionError 除以零
TypeError
資料型別不符
FileNotFoundError 找不到檔案
IndexError
索引超出範圍
KeyError
字典中找不到指定的鍵
實戰練習題
安全除法
讓使用者輸入分子與分母,並避免「除以 0」的錯誤。
try:
a = int(input("請輸入分子:"))
b = int(input("請輸入分母:"))
print("結果為:",
a / b)
except
ValueError:
print("請輸入數字!")
except
ZeroDivisionError:
print("分母不能是 0!")
安全輸入(整合 while)
#程式開始
#複利輸入驗證邏輯
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)
#程式結束
程式執行:
請輸入本金:-1
輸入值必須大於 0!
請輸入本金:10000
請輸入利率(例如 0.05):0.05
請輸入年限:10
✅ 程式成功執行!
重點總結
try 嘗試執行可能會出錯的程式
except 捕捉錯誤並處理,不讓程式崩潰
else 若沒有錯誤,才執行這段程式
finally 無論如何都會執行(例如清理動作)
ValueError 常見錯誤類型之一,表示資料型別錯誤
留言
張貼留言