Python

【Python】tryを使ったエラー処理(例外処理)の仕方を解説

この記事では、Pythonでエラーが発生した場合の処理を定義する方法を解説します。発生したエラーに応じて実行される処理のことを「エラー処理」や「例外処理」と呼びます。エラーが発生したけどプログラムを中断したくない場合、あらかじめエラー処理を定義しておくことでエラーの内容に応じた処理を実行させることができます。

エラー処理の仕方

Pytohnでエラー処理をするには、try文とexcept節を使って定義します。

try:
    # なんらかの処理
except:
    # tryブロック内でエラーが発生した場合の処理

オプションとしてfinally節を定義できます。finally節は、例外処理の最後に実行されますが、try文ブロック内でエラーが発生しなかった場合にも必ず実行されます。

try:
    # なんらかの処理
except:
    # tryブロック内でエラーが発生した場合の処理
finally:
    # 必ず処理される

サンプル

以下のコードは、try文ブロック内であえてエラーを発生させ、エラー処理を行っています。

value = 'one'

try:
    value = int(value)
except:
    print('valueはintに変換できません')

実行結果

valueはintに変換できません

発生したエラーで処理を分岐させる

except節にエラーの型を指定することで、型ごとに処理を分けることができます。

value = 'one'

try:
    value = int(value)
except ValueError:             # ValueErrorを指定
    print('ValueErrorが発生')
except:
    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'

エラーメッセージを受け取る

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'

エラーを発生させる

raise文を使うことで、エラーを自発的に発生させることができます。

def func(num: int):
    if num == 0:
        # エラーを発生させる
        raise

try:
    func(0)
except:
    print('func関数でエラー発生')

実行結果

func関数でエラー発生

raise文にエラーの型を指定することで発生させるエラーの種類を指定できます。また、引数に文字列を指定することでエラーメッセージを指定できます。

def func(num: int):
    if num == 0:
        raise ValueError('エラーが発生!')

try:
    func(0)
except ValueError as e:
    print(e)

実行結果

エラーが発生!

まとめ

この記事では、Pythonの例外処理について解説しました。

おさらい

もし、理解できない箇所があったら記事を読み返してみましょう!

def func():
    raise ValueError('ValueErrorが発生しました!')

try:
    func()
except ValueError as e:
    print(e)
except:
    print('その他のエラー')
finally:
    print('例外処理終了!')

実行結果

ValueErrorが発生しました!
例外処理終了!

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』