【Python入門】try文での例外処理やexceptによるエラー内容の取得方法を解説

Pythonでは、try文を使って例外発生時の対応を行うことができます。

try文を活用すれば、特定の処理に対してエラー内容を取得したり、例外発生時の処理指定が可能です。

この記事では、try文での例外処理や、except節によるエラー内容の取得方法について解説していきます。

例外…プログラムの実行が継続できないような異常(エラー)のこと

目次

基本の使い方

try文の主な構成として、try節とexcept節の2種類に分けられます。

【try節】実行する処理を指定

try節では、エラーの取得対象となる実行内容を指定します。

下で紹介するexcept節では、try節の処理時に発生した例外処理(エラー対応)を記述する形になります。

また、Pythonではインデント(字下げ)した内容に対して「この部分がtry節で行う処理」と認識する仕様になっています。

そのため、処理内容については必ず字下げを行うようにしてください

【except節(as)】エラー内容を取得し、例外処理を指定

except節では、指定したエラーが発生した場合にどう処理するかを指定します。

エラー名(exceptの後に記述)」の部分には、エラーの最終行で表示される:以前の部分を指定します。

発生したエラーの内容は「変数名(as以降で記述)」に保持され、処理時に使用することができます。

なお、except節はエラーの種類に応じて何回でも使用が可能です

こちらもtry節と同様、処理内容については字下げを行うようにしましょう。

word = "テスト"  # wordという変数に、文字列(テスト)を保持

try:  # 以下の処理を実行
    word = int(word)  # wordの中身を整数に変換する
except ValueError as err:  # ValueErrorが発生した場合、errにエラー内容を保持して以下を実行
    print(err)  # errの中身を表示

= 実行結果 =

invalid literal for int() with base 10: 'テスト'

Pythonに存在するエラーの一覧を知りたい場合は、組み込み例外 – Python公式ドキュメントを参照ください

例外(エラー内容)の取得方法

try文では、except節の書き方を工夫することで、一度に複数あるいはすべての例外(エラー)を取得することも可能です。

一度に複数のエラー内容を取得したい場合

一度に複数のエラーを取得したい場合は、タプル(tuple型)にて指定を行います。

各エラー名を要素としてカンマ区切り(,)で記述することで、異なるエラーに対して同じ処理を適用できます。

ls = [1, 2, 3]  # lsという変数に、リストを保持

try:  # 以下の処理を実行
    word = int(ls)  # wordの中身を整数に変換する
except (ValueError, TypeError) as err:  # ValueErrorまたはTypeErrorが発生した場合、以下の処理を実行
    print(err)  # errの中身を表示

= 実行結果 =

int() argument must be a string, a bytes-like object or a real number, not 'list'

すべてのエラー内容を取得したい場合

指定されてない全ての例外を取得したい場合は、エラー名を指定せずにexcept節を記述します。

except:の形では、どんなエラーが発生しても対応できる代わりに、エラーの詳細内容を把握することができません

そのため、except:を使う場合は、それより前にtry節および通常のexcept節を記述しておく必要があります。

word = "テスト"  # wordという変数に、文字列(テスト)を保持

try:  # 以下の処理を実行
    word = int(word)  # wordの中身を整数に変換する
except:  # エラー(例外)が発生した場合、以下の処理を実行
    print("Error")  # errの中身を表示

= 実行結果 =

Error

例外時以外の処理指定

try文では、except節にて例外処理を行う以外にも、様々な場合に応じて処理を指定することができます。

【else】正常実行時の処理を指定

else節では、try節の処理が正常に実行できた場合に行う処理を指定できます。

except節での指定の有無に関わらず、何らかのエラーが発生した場合、else内の処理は行われません。

(except節で指定してない例外が発生した場合は、エラー行が出力されて実行が終了します)

そのためelseを使う場合は、それより前にtry節および全てのexcept節を記述しておく必要があります。

word = "3"  # wordという変数に、文字列(3)を保持

try:  # 以下の処理を実行
    word = int(word)  # wordの中身を整数に変換する
except ValueError as err:  # ValueErrorが発生した場合、以下の処理を実行
    print(err)  # errの中身を表示
else:  # 正常に実装できた場合は、以下の処理を実行
    print(word, type(word))  # wordの中身とデータ型を表示

= 実行結果 =

3 <class 'int'>

【finally】try文の終了時に行う処理を指定

finally節では、try文から抜け出す直前(終了時)に行う処理を指定できます。

exceptelse節と異なり、finally節の場合は例外の有無に関わらず必ず実行されます。

(except節で指定してないエラーが発生した場合は、finally節が実行されてから実行停止します)

breakcontinue文による抜け出しの場合も、同様にfinally節の実行処理を挟みます。

なお、finallyを使う場合は、それより前にtry/except/else節の記述が必要です。

ls = [1, 2, 3]  # lsという変数に、リストを保持

try:  # 以下の処理を実行
    word = int(ls)  # wordの中身を整数に変換する
except ValueError as err:  # ValueErrorが発生した場合、以下の処理を実行
    print(err)  # errの中身を表示
finally:  # try文が終了する際、以下の処理を実行
    print("try文を終了します")  # 指定の文字列を表示

= 実行結果 =

try文を終了します

Traceback (most recent call last):
  File "sample.py", line 4, in <module>
    word = int(ls)
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'

まとめ

この記事では、try文での例外処理や、except節によるエラー内容の取得方法について解説しました。

try文を使えば、プログラムの実行を止めずエラーを対処することができます。

Pythonを扱う上では欠かせない要素ですので、例外処理に困っている方はぜひ活用してみてください。

シェアはこちらから
目次