【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: 'テスト'
例外(エラー内容)の取得方法
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
文から抜け出す直前(終了時)に行う処理を指定できます。
except
やelse
節と異なり、finally
節の場合は例外の有無に関わらず必ず実行されます。
(except
節で指定してないエラーが発生した場合は、finally
節が実行されてから実行停止します)
break
やcontinue
文による抜け出しの場合も、同様に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を扱う上では欠かせない要素ですので、例外処理に困っている方はぜひ活用してみてください。