PROGRAM PYTHON

初心者のためのPython超入門【第16回 例外処理】

 

 

例外処理の使い方

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

 

 

-PROGRAM, PYTHON