Python

【Python】try文を使った例外処理の仕方を解説

この記事では、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'

asの使う場面と使い方について

スタックトレースの表示

標準モジュールであるtracebackprint_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文を使ってエラーが発生した際の処理を定義しておきましょう!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ