この記事では、Pythonで例外処理する方法を解説します。
例外処理とは、エラーが発生した時に実行される処理のことを言います。
また、「エラー処理」とも呼ばれたりします。
エラー(例外)が発生するとその時点でプログラムは中断されてしまう。エラーが発生したけどプログラムを中断したくない場合は、あらかじめ例外処理を定義しておくことでプログラムを中断することなく発生したエラーに応じた処理を実行させることができます。
それでは、例外処理の仕方を見ていきましょう!
例外処理の基本
例外処理をするには、try
文を使います。
try
文ブロック内でエラーが発生した場合、except
節が処理されます。try
文内でエラーが発生しなかった場合、except
節は無視されます。
try:
# なんらかの処理
except:
# tryブロック内でエラーが発生した場合の処理
サンプル
try
文ブロック内であえてエラーを発生させ、エラー処理を行っています。
value = 'one'
try:
# intに変換できないのでエラー発生
value = int(value)
except:
# try文でエラーが発生すると実行される
print('valueはintに変換できません')
実行結果
valueはintに変換できません
try
文を使って例外処理できました。
後処理(finally)
try
文のオプションとしてfinally
節を定義できます。finally
節は、例外処理の最後に実行されます。try
文ブロック内でエラーが発生してもしなくても必ず実行されます。
try:
# なんらかの処理
except:
# tryブロック内でエラーが発生した場合の処理
finally:
# 最後に必ず処理される
サンプル
先ほどのサンプルコードにfinally
を追加して実行してみます。
value = 'one'
try:
value = int(value)
except:
print('valueはintに変換できません')
finally:
print('例外処理 終了')
実行結果
valueはintに変換できません
例外処理 終了
発生したエラーで処理を分岐させる
try
文内で発生したエラーの型によって処理を分岐させることができます。エラーによって処理を分岐するには分岐させたいエラーの型を指定したexcept
節を定義します。
value = 'one'
try:
value = int(value)
except ValueError: # ValueErrorが発生した時に処理される
print('ValueErrorが発生')
except: # ValueError以外が発生した時に処理される
print('その他エラーが発生')
実行結果
ValueErrorが発生
分岐はいくつでも定義することができますが、
num = 'one'
try:
int(num)
except EOFError:
print('EOFErrorが発生')
except SyntaxError:
print('SyntaxErrorが発生')
except ValueError:
print('ValueErrorが発生')
実行結果
ValueErrorが発生
発生したエラーに対応する分岐先が存在しなければエラーがそのまま発生してしまう。
num = 'one'
try:
int(num)
except SyntaxError:
print('SyntaxErrorが発生')
実行結果
Traceback (most recent call last):
File "main.py", line 4, in
int(num)
ValueError: invalid literal for int() with base 10: 'one'
エラーメッセージを受け取る
except
節にas
を使うことでエラーが発生して生成されたインスタンスからエラーメッセージを受け取ることができます。
num = 'one'
try:
int(num)
except ValueError as e:
print(f'type: {type(e)}')
print(f'エラーメッセージ: {e}')
実行結果
type: <class 'ValueError'>
エラーメッセージ: invalid literal for int() with base 10: 'one'
スタックトレースの表示
標準モジュールであるtraceback
のprint_exc()
メソッドを呼び出すことで発生したエラーのスタックトレースを表示することができます。
import traceback
num = 'one'
try:
int(num)
except ValueError as e:
traceback.print_exc() # スタックトレースの表示
実行結果
Traceback (most recent call last):
File "/Users/user/Desktop/Python/main.py", line 6, in <module>
int(num)
ValueError: invalid literal for int() with base 10: 'one'
まとめ
この記事では、Pythonの例外処理について解説しました。
「ここエラーが発生するかもなぁ」と事前に想定できる場合は、try
文を使ってエラーが発生した際の処理を定義しておきましょう!
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ