Pythonの例外処理(try-except)について解説します!

プログラミング 公開日:
ブックマーク
Pythonの例外処理(try-except)について解説します!
どんなプログラムでも予期しないエラーが発生する可能性があります。こうしたエラーに対処するために、「例外処理」と呼ばれる仕組みがあり、Pythonではtry-except文が提供されています。本記事では、Pythonのtry-except文について解説します。

そもそも例外とは・・

例外(Exception)は、プログラムの実行中に発生する予期しないエラーのことです。

例えば、ゼロを除算(割り算)するコードがあったとします。

x = 10 / 0
print(x)

このコードを実行すると、

ZeroDivisionError: division by zero

の例外エラー(ゼロは除算できない)が発生します。

このように例外エラーが発生すると、その時点で処理が終了してしまいます。

try-except文の基本構文

Pythonでは例外処理を行うために、try-except文を使うことが多いです。

try-except文の基本構文は次の通りです。

try:
    # エラーが発生する可能性のある処理
except エラーの種類:
    # 例外が発生したときの処理

では、実際に先ほどのゼロ除算で発生する例外エラーの処理を書いてみましょう。

try:
    x = 10 / 0
except ZeroDivisionError:
    print("ゼロで除算することはできません。")

上記のコードを実行すると、先ほどのように「ZeroDivisionError」の例外エラーメッセージではなく、「ゼロで除算することはできません。」という、実装者側が意図したエラーメッセージを返却することができます。

複数の例外を処理する

1つのtryブロック内に、複数の異なる例外を処理することもできます。

例えば、下記のようなコードがあるとします。

try:
    # エラーが発生する可能性のある処理
except ZeroDivisionError:
    print("ゼロで除算することはできません。")
except FileNotFoundError:
    print("ファイルが見つかりませんでした。")
except Exception as e:
    print(f"予期しないエラーが発生しました: {e}")

この処理では、「ZeroDivisionError」と「FileNotFoundError」の例外エラーが想定されるため、個別に例外をキャッチするよう処理を記載しています。

加えて、「Exception」クラスは、すべての例外の親クラスであることを利用して、「ZeroDivisionError」と「FileNotFoundError」以外の例外エラーが発生した場合は、すべてException内の処理が実行されるよう記載しています。

また「Exception as e」と記載することで、例外オブジェクトを変数eに代入し、詳細なエラーメッセージを取得できます。

例えば、変数xをprintしようとして、誤って存在しない変数yをセットしているコードを実行してみます。

try:
    x = 10 / 2
    print(y)
except ZeroDivisionError:
    print("ゼロで除算することはできません。")
except FileNotFoundError:
    print("ファイルが見つかりませんでした。")
except Exception as e:
    print(f"予期しないエラーが発生しました: {e}")

実行結果は、

予期しないエラーが発生しました: name 'y' is not defined

となり、Exceptionクラス内のエラーメッセージが返却されていることがわかります。

elseとfinallyについて

例外が発生しなかった場合に行う処理を明記する場合は「else」、例外の発生に関わらず必ず処理を行う場合は「finally」を使用します。

else

下記の例では、10 / 2の計算は例外エラーなく行われるため、else内のメッセージが表示されます。

try:
    x = 10 / 2
except ZeroDivisionError:
    print("ゼロで除算することはできません。")
else:
    print("計算は成功しました。結果は:", x)

finally

finallyは、例外の発生有無に関わらず必ず実行されるため、リソースの解放など、必ず行うべき処理をここに書きます。

try:
    x = 10 / 2
except ZeroDivisionError:
    print("ゼロで除算することはできません。")
finally:
    print("処理が完了しました。")

この例では、必ず「処理が完了しました。」のメッセージが返却されます。

raiseについて

最後に明示的に例外を発生されることができる「raise」について解説します。

例えば、負の値が渡された際に、例外エラーを発生させたい場合、下記のようなコードで実現することができます。

def check_value(value):
    if value < 0:
        raise ValueError("負の値は許可されていません。")
    return value

try:
    result = check_value(-1)
except ValueError as e:
    print(e)

この例では、-1という負の値が渡され、raise内のValueErrorが実行され、「負の値は許可されていません。」のエラーメッセージが返却されます。

最後に・・

例外処理を正しく行うことで、ユーザーにとって使いやすく、開発者にとってデバッグしやすいコードに近づきます。

初心者の方には少し取っ掛かりづらいところではありますが、必ず必要になる処理になりますので、ぜひマスターしていきましょう。

TECH PLAYでは、ITに関わる様々なイベント・勉強会・講演会・交流会・カンファレンス・セミナーなどの情報を集約し掲載しています。

テクノロジーと共に成長しよう、
活躍しよう。

TECH PLAYに登録すると、
スキルアップやキャリアアップのための
情報がもっと簡単に見つけられます。

面白そうなイベントを見つけたら
積極的に参加してみましょう。
ログインはこちら

タグからイベントをさがす