Pythonのエラーハンドリング(try/except/finally)を少し練習する
2022/3/6 2022/4/15
Python認定基礎試験の勉強をしていますが、エラーハンドリング(try/except/finally)の方法について理解が浅く、実際にコードを書いて試してみました。
tryせずにエラーを発生させる
まずはtry:
を使わずにエラーを発生させてみます。今回は分かりやすく、数字をゼロで割るZeroDivisionErrorを発生させます。
x = 10 / 0
print(x)
シンプルなコードです。ゼロで割ることができないので、以下のようなエラーがでます。
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-5-06fbe68ed327> in <module>()
----> 1 x = 10 / 0
2 print(x)
ZeroDivisionError: division by zero
このようにZeroDivisionError: division by zero
と出力されます。この「ZeroDivisionError」と「division by zero」という2つのメッセージがポイントです。
try/exceptでエラーをキャッチする
ではtry/exceptを使ってみます。
try:
x = 10 / 0
except:
print("1. Error")
# Output Result
# 1. Error
このようにexcept:
とすることで、エラーをキャッチできます。
exceptではエラーを指定できる
exceptにZeroDivisionErrorを指定し、メッセージを受け取ることができます。
try:
y = 10 / 0
except ZeroDivisionError as e:
print(f"2. {e}")
print(f"3. {type(e)}")
except:
print("4. Error")
finally:
print("9. Finally")
このコードのようにexcept ZeroDivisionError as e:
とすることで、エラーメッセージを受け取れます。今回は変数eとしてますが、任意の名前で大丈夫です。また、finally:
により、エラーの発生有無に関わらず、最後に実行されます。出力結果は以下の通りです。
2. division by zero
3. <class 'ZeroDivisionError'>
9. Finally
変数eで受け取れるのは「division by zero」です。「ZeroDivisionError」というエラータイプを受け取りたい場合はtype()
で取得します。