Pythonのエラーハンドリング(try/except/finally)を少し練習する

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()で取得します。

めっさん
  • めっさん
  • 当サイトの管理人。ニューヨークの大学を飛び級で卒業。その後日系企業でグローバル案件に携わる。大小様々な企業を転々としながら、マレーシアやアメリカへの赴任経験を持つ。バイリンガルITエンジニアとしていかに楽に稼ぐか日々考えている。年齢は秘密だけど定年も間近かな。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です