Pythonの例外処理の基本(try,except)
pythonの例外処理はtry,exceptを利用する。
プログラムの文法的には間違いないが実行時に問題を起こすエラーで、そのエラーが発生した場合に代替処理を用意するのが例外処理と言う。
代表的なものとして以下のようなものがある
| FileNotFoundError | プログラムで指定されたファイルが見つからないエラー |
| IndexError | 配列などで指定したインデックスに値が存在しないエラー |
| TypeError | 型に関するエラー |
| ZeroDivisoinError | 0で割ろうとしたことによるエラー |
以下のように記述する
Example
- 例外処理(try...except)の基本的な書き方
num = 10.0 / 0 # tryの後に、インデント(空白4文字)を入れると例外が発生しないかチェック
except ZeroDivisionError as e: # tryの中でZeroDivisionError(数値を0で割った場合に起こる例外)、exceptの中を実行
print("例外発生") # 例外が発生した場合実行
print('{} : {}'.format(type(e),e)) # 例外が発生した場合、<class 'ZeroDivisionError'> : float division by zeroのようにどの例外か表示
- 例外の結果を詳細に表示したい場合
try:
num = 10.0 / 0
except ZeroDivisionError as e:
print('{} : {}'.format(type(e),e))
print(format_tb(e.__traceback__)) # format_tb(e.__traceback__)をprintするとどのファイルのどの行で例外が発生したか表示する
Pythonの例外処理の応用(else,finally)
pythonの例外処理を複数つなげることもできる
Example
- exceptを複数繋げて記述
count = 12
try:
fruit = fruits[2]
print(fruit + count)
except IndexError as e: # 配列に存在しないインデックスを指定した場合の例外
print('{} : {}'.format(type(e),e))
except TypeError as e: # 文字列型+数値型等、型の異なる計算した場合の例外
print('{} : {}'.format(type(e),e))
except Exception as e: # 全ての例外をキャッチ
print('{} : {}'.format(type(e),e))
- elseは例外が発生しなかった場合に実行され、例外が発生した場合には実行されない
- finallyは例外が発生した場合にも、発生しなかった場合にも実行される

Example
- else, finallyの利用方法
num = 12 / 2
except ZeroDivisionError as e: # 数式で0で除算を行った場合の例外(この例では実行されない)
print('{} : {}'.format(type(e),e))
else:
print("elseが実行されました") # elseは例外が発生しなかった場合のみ実行される(この例では実行される)
finally:
print("finallyが実行されました") # finallyは例外の発生有無に関係なく実行される(この例では実行される)
raiseで例外を発生させる
pythonでは、例外を発生させることもできる。
以下のようにraise('メッセージ')を利用する
Example
- raiseの利用方法
if(b == 0):
raise ZeroDivisionError('bに0を設定しないでください') # raiseをすると呼び出し元にメッセージと例外を返す
else:
return a / b
try:
result = devide(10,0) # 関数を呼び出すと、ZeroDivisionErrorが返る
except ZeroDivisionError as e:
print('{} : {}'.format(type(e), e)) # ZeroDivisionErrorが発生。<class 'ZeroDivisionError'> : 「bに0を設定しないでください」と表示
assertは、テストなどで値を確認したい時に利用する。 のように記述し、条件式が正しいかどうかテストする。 例外の独自定義は、Exceptionクラスを継承したクラスを作成することができる raise MyException('メッセージ') # 例外を発生させたい場所でraiseを利用する
assert 条件式、条件式がFalseの時に表示するメッセージ
Example
try:
assert small > big, "smallはbigより小さくないといけません" # small>bigの場合、メッセージを表示
except AssertionError as e:
print("テスト終了")
Example
pass