攔截例外
在開始撰寫你自己的自訂例外之前,先確認你已經掌握處理例外的基礎。
在這個練習中,你會拿到一個函式 invert_at_index(x, ind),它接收兩個參數:清單 x 與索引 ind,並將該索引位置的元素取倒數。舉例來說,invert_at_index([5,6,7], 1) 會回傳 1/6,也就是 0.166666。
先直接執行程式碼,並在主控台查看輸出。這個函式中有兩個不安全的操作:第一,如果要取倒數的元素值為 0,就會引發 ZeroDivisionError 例外。第二,如果傳入的索引超出清單範圍,就會引發 IndexError。這兩種情況都會中斷腳本的執行,這通常不是我們想要的。
本練習屬於課程
Python 物件導向程式設計
練習說明
在函式內使用 try - except - except 模式(包含兩個 except 區塊)來攔截並處理以下兩種例外:
try直接執行既有程式碼,- 若發生
ZeroDivisionError,印出"Cannot divide by zero!", - 若發生
IndexError,印出"Index out of range!"
當程式能順利執行且主控台的輸出為下列內容時,代表你做對了:
0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# MODIFY the function to catch exceptions
def invert_at_index(x, ind):
return 1/x[ind]
a = [5,6,0,7]
# Works okay
print(invert_at_index(a, 1))
# Potential ZeroDivisionError
print(invert_at_index(a, 2))
# Potential IndexError
print(invert_at_index(a, 5))