Python で例外を処理する方法 (Try-Except-Finally)

try、excel、else、finally ブロックを使用して Python で例外を処理する方法を学びます。エラーがなく、クラッシュ耐性のある Python コードを作成します。

エディターでこのソリューションを試してください

概要

堅牢なソフトウェアは、ファイルの欠落、無効なユーザー入力、データベース障害、ネットワークの中断などの予期せぬ状況に対処できるように準備する必要があります。 Python でエラーが発生すると、例外が発生します。処理されないままにしておくと、例外によってプログラムが直ちに停止され、トレースバック スタックが出力されます。

実行時エラーを管理するための Python の主なツールは、`try-excel` ブロックです。エラーを発生させる可能性のあるコードを「try」ブロック内に配置し、エラー処理コードを 1 つ以上の「Except」ブロック内に定義します。すべての汎用例外 (「例外:」) をキャッチするとバグを隠すことができるため、正確な例外クラス (「ValueError」や「ZeroDivisionError」など) を指定することを強くお勧めします。

例外フローをより表現力豊かにするために、Python には 2 つの追加ブロック、`else` と `finally` が用意されています。 「else」ブロックは、「try」ブロックで例外が発生しなかった場合にのみ実行されます。これは、成功した場合にのみ実行する必要があるコードに役立ちます。 「finally」ブロックは、例外が発生したかどうかに関係なく*常に*実行されるため、ファイルやデータベース接続を閉じるなどのクリーンアップに最適な場所になります。

コードと実行の出力

このスクリプトは、try、excel、else、finally を使用した Python での堅牢なエラー処理を示します。

def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
端子出力
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

段階的な実装

  • 失敗する可能性のあるコードは try ブロック内に配置します。
  • 例外 ExceptionType: ブロックを使用して特定のエラー タイプをキャッチし、失敗を適切に処理します。
  • try ブロックが成功した場合にのみ実行する必要があるコードには、else を使用します。
  • エラーに関係なくクリーンアップ アクションが実行されることを保証するには、finally を使用します。

よくある質問

単一の例外ブロックで複数の例外をキャッチできますか?

はい、タプルとして渡すことができます: (ValueError, TypeError) を e: として除きます。

独自の例外を発生させるにはどうすればよいですか?

raise キーワードの後に例外インスタンスを指定します: raise ValueError("Invalidconfigurationvalue")。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。