【python】例外処理について try-except
0除算や型間違いなどエラーを発生させるとプログラムは停止してしまいます。
この時、プログラムを止めずに次の処理を行うために例外処理があります。
処理実行中に想定外のエラーが発生した時にプログラムを止めたくない。
特定のエラーの時にだけしたい処理があるなどの時に例外処理を行います。
下記は基本的な形になります。
tryの中に処理を記載してその中でエラーが発生するとtry内の処理を中断して、except内の処理が実行されます。
try: #エラーが発生するかもしれない処理
【処理1】
【処理2】
・・・
【処理n】
except: #tryの中でエラーが発生後に飛ぶ場所
【処理1】
【処理2】
・・・
【処理n】
エラー発生時にキャッチする
下記は0除算を行ったときに例外処理を行うプログラムです。
try:
num = 10/0
print("エラーが発生するのでここは実行できません")
except:
print("エラーが発生しました") #エラーが発生しました
2行目:0除算を行うのでエラーが発生します。(この時点で5行目に移動します)
3行目:このprint関数は実行されません
5行目:2行目を実行してエラーが発生した時点でここに飛びます。
エラーが発生した時にエラー内容を知る(万能)
traceback.print_exc()はexcept内で実行するとエラー内容を知ることができます。
取り合えずエラー内容を知りたいとき、デバッグ時は便利なので使用していきましょう。
try:
num = 10/0
except:
import traceback
traceback.print_exc() #Traceback (most recent call last):
# File "Exception.py", line 12, in sample2
# num = 10/0
#ZeroDivisionError: division by zero
2行目: 0除算でエラーを発生(3行目に移動)
4行目:tracebackをインポート
5行目:エラー発生の行数やエラー内容表示
特定のエラーでのみ例外処理を行う(ValueError:型間違い)
下記は文字列をint型にキャストした時(ValueError)だけの例外処理を行います。
try:
num = int( "a" )
except ValueError:
print("エラー内容:ValueError") #エラー内容:ValueError
except:
print("エラーが発生しました")
2行目:文字列をint型にキャストしてエラー発生(3行目に飛ぶ)
3行目:ValueError(型間違いに関するエラー)の時の未実行されます。
5行目:通常のexceptは実行されません。
特定のエラーでのみ例外処理を行う(0除算によるエラー)
0除算時のエラー(ZeroDivisionError)で例外処理を行ってみましょう。
try:
num = 10/0
except ValueError:
print("エラーが発生しました:ValueError")
except ZeroDivisionError:
print("エラーが発生しました:ZeroDivisionError") #エラー内容:ValueError
except:
print("エラーが発生しました")
2行目:0除算でエラー(ZeroDivisionError)発生 5行目に飛ぶ
3-4行目:ValueErrorは発生していないため実行されない
5行目: 0除算発生 (ZeroDivisionError) している為、実行
6行目:エラー表示
7-8行目:実行されない
エラーの内容を表示する
特定のエラーのみをexceptでキャッチした時はasでエラー内容のオブジェクトを取得することができます。
try:
num = 3/0
except ValueError as err:
print("エラーが発生しました:ValueError")
print( err )
except ZeroDivisionError as err:
print("エラーが発生しました:ZeroDivisionError") #エラーが発生しました:ZeroDivisionError
print( err ) #division by zero
except:
print("エラーが発生しました")
2行目:0除算でエラーを発生(6行目に移動)
6行目:エラー内容を変数「err」にセット
8行目:エラー内容表示(division by zero)
ソースコードはこちらから
このページで紹介している記事のソースコードの販売を行っています。
python基本を押さえたソースコードを収録しています。
購入頂いたソースコードは商用利用OKになります。
最近のコメント