Python で例外が発生したかどうかを確認する方法

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Python で例外が発生したかどうかを確認する方法を学びます。この実験では、例外を理解し、try-except ブロックを使用して例外をキャッチして処理することに焦点を当て、プログラムのクラッシュを防ぎます。

まず、ZeroDivisionError 例外を発生させる Python スクリプトを作成します。次に、try-except ブロックを使用してこの例外をキャッチし、エラーを適切に処理し、プログラムを継続実行する方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-559611{{"Python で例外が発生したかどうかを確認する方法"}} python/raising_exceptions -.-> lab-559611{{"Python で例外が発生したかどうかを確認する方法"}} end

例外の理解

このステップでは、Python の例外について学びます。例外とは、プログラムの実行中に発生し、通常の命令の流れを中断するイベントです。例外を理解することは、堅牢で信頼性の高い Python コードを書くために重要です。

Python でエラーが発生すると、例外が発生します。例外が処理されない場合、プログラムは終了し、エラーメッセージが表示されます。ただし、try-except ブロックを使用することで、例外をキャッチして処理し、プログラムのクラッシュを防ぐことができます。

例外を発生させる簡単な例から始めましょう。

  1. LabEx 環境で VS Code エディタを開きます。

  2. ~/project ディレクトリに division.py という名前の新しいファイルを作成します。

    ~/project/division.py
  3. division.py ファイルに以下のコードを追加します。

    numerator = 10
    denominator = 0
    result = numerator / denominator
    print(result)

    このコードは 10 を 0 で割ろうとしますが、これは無効な操作であり、ZeroDivisionError 例外が発生します。

  4. ターミナルで以下のコマンドを使用してスクリプトを実行します。

    python division.py

    次のような出力が表示されます。

    Traceback (most recent call last):
      File "/home/labex/project/division.py", line 3, in <module>
        result = numerator / denominator
    ZeroDivisionError: division by zero

    トレースバックにより、division.py ファイルの 3 行目で ZeroDivisionError が発生したことがわかります。例外が処理されなかったため、プログラムは終了しました。

では、try-except ブロックを使用してこの例外を処理する方法を見てみましょう。

try-except を使った例外のキャッチ

このステップでは、Python で try-except ブロックを使用して例外をキャッチし、処理する方法を学びます。これにより、エラーが発生してもプログラムを継続実行することができます。

try-except ブロックの基本構造は次の通りです。

try:
    ## 例外を発生させる可能性のあるコード
except ExceptionType:
    ## 例外を処理するコード

try ブロック内のコードが実行されます。ExceptionType 型の例外が発生した場合、except ブロック内のコードが実行されます。例外が発生しない場合、except ブロックはスキップされます。

前のステップの division.py ファイルを変更して、ZeroDivisionError 例外を処理しましょう。

  1. VS Code エディタで division.py ファイルを開きます。

  2. コードを変更して try-except ブロックを追加します。

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError:
        print("Error: Cannot divide by zero.")

    このコードでは、try ブロックに ZeroDivisionError を発生させる可能性のある除算演算が含まれています。except ブロックは ZeroDivisionError をキャッチし、エラーメッセージを出力します。

  3. ターミナルで以下のコマンドを使用してスクリプトを実行します。

    python division.py

    次の出力が表示されます。

    Error: Cannot divide by zero.

    プログラムはクラッシュする代わりに、ZeroDivisionError を適切に処理し、有益なメッセージを出力します。

これは、try-except ブロックを使用して例外によるプログラムのクラッシュを防ぐ方法を示しています。

例外の種類を調べる

このステップでは、except ブロック内で例外の種類を調べ、例外メッセージにアクセスする方法を学びます。これにより、異なる種類の例外を異なる方法で処理し、より詳細なエラーメッセージを提供することができます。

例外がキャッチされたとき、except 節で as キーワードを使用して例外を変数に割り当てることができます。

try:
    ## 例外を発生させる可能性のあるコード
except ExceptionType as e:
    ## 例外を処理するコード
    ## 'e' は例外オブジェクト

変数 e には例外オブジェクトが格納され、これを使用して例外の種類やメッセージなどの情報にアクセスすることができます。

division.py ファイルを変更して、例外の種類を調べ、例外メッセージを出力しましょう。

  1. VS Code エディタで division.py ファイルを開きます。

  2. コードを変更して、例外の種類を調べ、メッセージを出力します。

    try:
        numerator = 10
        denominator = 0
        result = numerator / denominator
        print(result)
    except ZeroDivisionError as e:
        print(f"Error: {type(e).__name__} - {e}")

    このコードでは、ZeroDivisionError をキャッチして変数 e に割り当てています。そして、type(e).__name__ を使用して例外の種類の名前を取得し、e を使用して例外メッセージを取得します。これらを書式付き文字列で出力します。

  3. ターミナルで以下のコマンドを使用してスクリプトを実行します。

    python division.py

    次の出力が表示されます。

    Error: ZeroDivisionError - division by zero

    出力には、例外の種類 (ZeroDivisionError) と例外メッセージ (division by zero) が含まれています。

これにより、発生したエラーに関するより詳細な情報を提供でき、コードのデバッグが容易になります。また、この情報を使用して、異なる種類の例外を異なる方法で処理し、それぞれのケースに対してより具体的なエラー処理を行うことができます。

まとめ

この実験では、Python の例外について学びました。例外とは、プログラムの通常の流れを中断するイベントです。エラーが発生すると例外が発生し、処理されない場合、プログラムは終了します。

また、try-except ブロックを使用して例外をキャッチし、処理する方法を学び、プログラムのクラッシュを防ぐことができました。この実験では ZeroDivisionError を示し、try-except を使用してこれを処理する方法を説明しました。