例外処理

Python

プログラムを書いていると、何らかの問題が発生してプログラムが正常に動作しない場合があります。例えば、ファイルが見つからない、ゼロで割り算をしようとした、などがそのような例です。こうした問題を解決するために、Pythonには例外処理機能が備わっています。

例外とは

例外 (Exception) は、予期しない事象やエラーを示すオブジェクトです。Pythonでは、プログラムが実行中に発生したエラーを自動的に検出し、該当する例外オブジェクトを生成します。

例外処理の書式

Pythonにおける例外処理は、try文とexcept文を使って書きます。例外が発生する可能性がある箇所をtryブロックで囲み、例外が発生した場合に実行する処理をexceptブロックで指定します。以下は例外処理の書式です。

try:
    # 例外が発生する可能性のある処理
except 例外の種類:
    # 例外が発生した場合に実行する処理

例外の種類

Pythonには多数の例外が用意されており、以下はその一部です。

  • Exception:すべての例外の基底クラス
  • ValueError:値が不適切な場合に発生する例外
  • TypeError:オブジェクトの型が不適切な場合に発生する例外
  • NameError:定義されていない変数を参照した場合に発生する例外
  • ZeroDivisionError:ゼロで除算した場合に発生する例外
  • FileNotFoundError:ファイルが見つからなかった場合に発生する例外

例外の種類を指定しないexcept文を使用することもできますが、この場合はすべての例外に対応することになります。

例外処理の例

以下は、ファイルを開いてその内容を読み込む際にFileNotFoundErrorが発生した場合に、「ファイルが見つかりませんでした。」と表示する例です。

try:
    with open('sample.txt', 'r') as f:
        data = f.read()
except FileNotFoundError:
    print('ファイルが見つかりませんでした。')

例外の送出

Pythonでは、プログラムの実行中に発生するエラーや異常事態を「例外」として扱います。例外が発生した場合、プログラムはその場で停止してしまうため、例外に対処するためには例外処理を行う必要があります。

例外を自分で発生させることができるため、プログラム内で特定の状況に応じて例外を発生させ、例外処理を行うことができます。このように、自分で例外を発生させることを「例外の送出」と呼びます。

例外の送出方法

例外を送出するには、raise文を使います。raise文は、引数として例外オブジェクトを受け取ります。例外オブジェクトには、Exceptionクラスを継承して定義されたクラスや、Exceptionクラスを直接継承したクラスを指定することが一般的です。

class MyException(Exception):
    pass

def my_function():
    # 何らかの処理
    raise MyException("MyExceptionが発生しました。")

try:
    my_function()
except MyException as e:
    print(e)

上記の例では、MyExceptionという例外を自分で定義し、my_function内で例外を発生させています。raise文によって、MyExceptionのオブジェクトが作成され、それが例外として発生します。

例外を送出した後は、例外処理でキャッチする必要があります。上記の例では、try文とexcept文を使って、MyExceptionをキャッチしています。キャッチした例外オブジェクトは、asキーワードで指定した変数に代入され、print文で表示されます。

コメント