例外処理の使い方
Pythonには、エラーが発生した場合の仕組みがあります。
今回は、try文を使った例外処理の使い方を説明します。
基本的な例外処理の書き方
例外処理を行うには、try文を使います。
try文の基本的な使い方は、以下のようになります。
try:
例外対象の処理
except 例外ハンドラ:
対象の例外が発生した場合の処理
例えば、以下のように0(ゼロ)で割り算をすると、Pythonがエラーメッセージを表示します。
実行例 >>> 1 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero
これを例外処理を使ってシンプルなエラーメッセージにしたい場合は、以下のようにします。
except節のあとに例外ハンドラを書かない場合は、全ての例外が対象になります。
実行例
>>> try:
... 1 / 0
... except:
... print("ERROR")
...
ERROR
例外の対象を「除算や剰余演算の第2引数が0」の時のエラーに絞りたい場合は、例外ハンドラにZeroDivisionErrorを指定します。
この場合、他のエラーが発生してもexcept節の処理は実行しません。
実行例
>>> try:
... 1 / 0
... except ZeroDivisionError:
... print("ERROR")
...
ERROR
下記の例は、ValueErrorのエラーのため、except節の処理は実行されません。
実行例 >>> try: ... int("a") ... except ZeroDivisionError: ... print("ERROR") ... Traceback (most recent call last): File "<stdin>", line 2, in <module> ValueError: invalid literal for int() with base 10: 'a'
複数の例外処理を定義する
例外処理を複数定義することもできます。
try:
例外対象の処理
except (例外ハンドラ1, 例外ハンドラ2, …):
対象の例外が発生した場合の処理
実行例
try:
... int("a")
... except (ZeroDivisionError, ValueError):
... print("ERROR")
...
ERROR
また、except節を複数書くことによって、例外処理を分けることもできます。
try:
例外対象の処理
except 例外ハンドラ1:
例外1が発生した場合の処理
except 例外ハンドラ2:
例外2が発生した場合の処理
except 例外ハンドラn:
例外nが発生した場合の処理
実行例
>>> try:
... 1 / 0
... except ZeroDivisionError:
... print("ZeroDivisionError!")
... except ValueError:
... print("ValueError!")
...
ZeroDivisionError!
他にも例外ハンドラは多くの種類があります。
詳細は以下のリンクを参照してください。
正常終了時の処理を定義する
try文では、else節を使って正常終了時の処理も定義できます。
try:
例外対象の処理
except 例外ハンドラ:
対象の例外が発生した場合の処理
else:
正常終了した場合の処理
実行例
>>> try:
... 2 / 1
... except:
... print("ERROR")
... else:
... print("OK")
...
2.0
OK
終了時の処理を定義する
finally節を使って、処理が終わった後の処理を定義できます。
try:
例外対象の処理
except 例外ハンドラ:
対象の例外が発生した場合の処理
finally:
終了時の処理
実行例
>>> try:
... 1 / 0
... except:
... print("ERROR")
... finally:
... print("END")
...
ERROR
END