例外を発生させる

例外の送出

Pythonで特定の例外を発生させるにはraise文を使用します。

例外発生
raise 発生させたい例外クラス or 例外オブジェクト

raiseの後には例外クラスでも例外オブジェクトでも指定できる、という点に注意してください。

例外クラスが渡された場合は、自動的に引数無しのコンストラクタが呼び出されてインスタンス化されます。

def sample(num):
    if type(num)!=int:
        raise TypeError('パラメータが不正です')

    return num * 10

上のコードでは、整数を10倍するsample関数が用意されていますが、int型以外を引数に指定するとTypeErrorが発生します。

また、引数で任意のメッセージを設定することが可能です。

例外の再送出

例外が発生したことをどこかに記録するだけで、その処理を処理するつもりがない場合はraiseを利用して補足した例外を再送出することができます。

x = 1000
y = 0

try:
    z = x / y
    print(z)
except ZeroDivisionError as e:
    print('除算に0が指定されました')
    raise e

上のコードでは、exceptで補足した例外にeという変数名を付与し、raiseで再送出しています。

独自例外の定義

一般的な例外を扱うことができる言語と同様、Pythonでも独自例外を定義することが可能です。

前のページでも少し触れましたが、Exceptionクラスを継承して独自例外を実装します。

名前はErrorで終わるように命名するのが一般的です。

class ParamError(Exception):

    pass

def sample(num):
    if type(num)!=int:
        raise ParamError('パラメータが不正です')
 
    return num * 10

上のコードは先ほどの例外を独自例外に書き換えたものです。

通常のクラスと同様、独自にメンバ変数やメソッドを実装することが可能ですので、必要に応じてカスタマイズしましょう。