このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】try文とexcept節の定義

try文とexcept節の定義

 プログラム実行中に予期しないエラーが発生すると、そのままではプログラムが強制終了してしまいます。try文とexcept節を使うことで、エラー(例外)が起きた際にもプログラムの流れを制御し、適切な処理を行いながら実行を継続することが可能となります。ここでは、try文とexcept節の基本的な書き方と動作、そして複数の例外を扱う方法について、表や具体例を交えて解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.try文とexcept節の基本

1.1. try文の役割

 try文は、例外が発生する可能性のある処理を記述するためのブロックです。try節内でエラーが起こらなければ、全ての処理が順次実行され、except節はスキップされます。

try:
    # 例外が発生する可能性のある処理
    print("This is the try block.")
except Exception:
    # 例外が発生した場合に実行される処理
    print("An error occurred.")

1.2. except節の役割

 except節は、try節内で発生した特定の例外に対して処理を行うブロックです。例外クラスを指定することで、そのエラーが発生した場合にのみ実行されます。複数のexcept節を並べることで、異なるエラーに対して個別の対応が可能になります。

以下の表は、try文とexcept節の基本構造を示しています。

項目説明
try節例外が発生する可能性のある処理を記述する部分
except節指定した例外が発生した場合に実行される処理を記述する部分

2.try文とexcept節を使った例外処理の実践

2.1. try文の動作の流れ

 try節内で例外が発生すると、その時点以降の処理はスキップされ、該当するexcept節へ移ります。例外が発生しなかった場合は、except節は実行されずにtry文の外に処理が移ります。

【try文の動作フロー】

状況実行される処理
例外が発生しない場合try節内の全処理が順に実行され、except節はスキップされる。
例外が発生した場合try節内の発生時点以降の処理はスキップされ、該当するexcept節が実行される。

2.2. 例外処理を用いた割り算プログラムの例

 以下は、ユーザーから「dividend(被除数)」と「divisor(除数)」を入力し、整数の割り算を行うプログラムです。ここでは、発生しうるエラーとして、数字以外の入力によるValueErrorと、除数が0の場合のZeroDivisionErrorに対して、それぞれ適切なエラーメッセージを表示します。

while True:
    try:
        # 被除数と除数をユーザーから入力し、整数に変換する
        dividend = int(input("Dividend: "))
        divisor = int(input("Divisor: "))
        # 整数除算の結果を表示
        print("Result:", dividend // divisor)
        print("-" * 25)
    except ValueError:
        # 入力が整数に変換できなかった場合の処理
        print("Input an integer.")
        print("-" * 25)
    except ZeroDivisionError:
        # 除数が0の場合の処理
        print("Divisor must not be 0.")
        print("-" * 25)

実行結果

Dividend:  20
Divisor:  5
Result: 4
-------------------------
Dividend:  abc
Input an integer.
-------------------------
Dividend:  10
Divisor:  0
Divisor must not be 0.
-------------------------

詳しい解説

  • while True: で無限ループを開始。Ctrl + Cなど(JyupyterLabでは■ボタン)で手動終了します。
  • try: 節内では、int(input(...)) によってユーザー入力を整数に変換しています。ここで、数字以外が入力されるとValueErrorが発生します。
  • また、dividend // divisor の実行時に、もし divisor に0が入力されれば、ZeroDivisionErrorが発生します。
  • それぞれのexcept節は、発生した例外に応じたエラーメッセージを表示し、区切り線(25個のハイフン)を出力してから、whileループの先頭に戻ります。
  • 例外が発生しなかった場合は、try節内の全ての処理が実行され、結果が表示されます。

まとめ

 try文とexcept節を用いると、例外が発生した際にも本来の処理の流れを維持しつつ、適切なエラー処理を簡潔に記述することができます。

  • try節では、エラーが発生する可能性のある処理を記述し、
  • except節では、特定の例外に対して実行すべき処理を記述します。

 これにより、ユーザー入力の誤りや計算上の問題が発生しても、プログラムが突然終了することなく、エラーメッセージを表示して再度入力を促すなどの対応が可能となります。