在前天中,我們的程式多半假設「一切都會順利」。
但是現實世界中,程式很常遇到「突發狀況」:
如果沒有處理這些狀況,程式就會「直接掛掉」。
為了讓程式更穩定,我們需要學會 錯誤與例外處理(Exception Handling)。
生活比喻:
就像你要搭火車,如果火車誤點,系統應該提示「改搭下一班」,而不是整個車站停擺。
try-except
try:
x = 10 / 0
except ZeroDivisionError:
print("發生錯誤:不能除以零")
try
:嘗試執行可能會出錯的程式碼except
:捕捉錯誤,並執行對應的處理try:
num = int(input("請輸入一個數字:"))
result = 100 / num
print("計算結果:", result)
except ValueError:
print("發生錯誤:輸入的不是數字")
except ZeroDivisionError:
print("發生錯誤:不能除以零")
else
與 finally
try:
name = "Jr"
score = int(input(f"{name} 請輸入分數:"))
except ValueError:
print("請輸入有效的數字")
else:
print(f"{name} 的分數是 {score}")
finally:
print("程式結束,感謝使用!")
def check_age(age):
if age < 0:
raise ValueError("年齡不能是負數")
return age
try:
print(check_age(-5))
except ValueError as e:
print("錯誤:", e)
錯誤類型 | 常見情境 |
---|---|
ValueError |
資料型別轉換錯誤(int("abc") ) |
ZeroDivisionError |
除以零 |
FileNotFoundError |
開啟不存在的檔案 |
IndexError |
list 索引超出範圍 |
KeyError |
dict 查不到 key |
def get_score():
try:
score = int(input("請輸入分數:"))
if not (0 <= score <= 100):
raise ValueError("分數必須在 0 ~ 100 之間")
return score
except ValueError as e:
print("錯誤:", e)
return None
Jr_score = get_score()
if Jr_score is not None:
print(f"Jr 的成績是 {Jr_score}")
生活化比喻小結
程式中的錯誤就像搭車時的突發狀況:火車誤點、客運塞車、甚至道路封閉。
如果沒有備案,就只能乾等,行程全被打亂。
但有了「例外處理」就像規劃好替代路線:改搭下一班車、換走別條路,雖然過程有波折,但最終仍能抵達目的地。