例外を捕捉する
独自のカスタム例外を書く前に、まずは例外処理の基本をしっかり確認しましょう。
この演習では、2つの引数(リスト x とインデックス ind)を取り、そのインデックス位置の要素を反転(逆数に)する関数 invert_at_index(x, ind) が与えられています。たとえば、invert_at_index([5,6,7], 1) は 1/6、つまり 0.166666 を返します。
まずはコードをそのまま実行して、コンソールの出力を確認してください。この関数には2つの安全でない操作があります。1つ目は、反転しようとしている要素の値が 0 の場合、ZeroDivisionError 例外が発生することです。2つ目は、関数に渡したインデックスがリストの範囲外の場合、IndexError が発生することです。どちらの場合もスクリプトは中断されてしまい、望ましくないことがあります。
この演習はコースの一部です
Python によるオブジェクト指向プログラミング
演習の手順
関数内で try - except - except パターン(except ブロックを2つ)を使って、次の2つの例外を捕捉・処理してください。
- コードをそのまま
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))