【python】自作例外処理 raiseの使い方

自分が決めた条件で意図的に例外を発生する方法としてraiseの使用があります。
raiseで例外クラスを起動させることで例外を発生させることができます。

意図的に例外を発生させる例(Exception)

今回使用している例外クラス「Exception」は多くの例外クラスの派生元になっているクラスです。(基底クラスとも呼ばれます。)
Exceptionの引数は変数「e」として渡ることになります。

try:
    raise Exception("エラー発生!!")
except Exception as e:
    print(e)   #エラー発生!!

意図的に例外を発生させる例(Exception以外)

Exception以外の例外も強制的に出してみましょう。
ZeroDivisionErrorは0除算を行った時に発生するエラーです。

try:
    raise ZeroDivisionError()
except:
    import traceback
    traceback.print_exc()    #Traceback (most recent call last):
                             #  File "Exception_make.py", line 12, in sample2
                             #    raise ZeroDivisionError()
                             #ZeroDivisionError

自作関数中で例外が発生した場合の例

関数「sample3」を実行したときにコール先の「testException」では必ず例外が発生します。
この時もexceptで例外処理を行うことができます。

def testException():
    raise Exception("呼び出した関数でエラー発生!!(Exception)")

def sample3():

    try:
        testException()
    except Exception as e:
        print(e)   #呼び出した関数でエラー発生!!(Exception)

Exceptionから派生した自作例外を作成(引数有り)

基底クラスのExceptionを派生させて自作例外を作成しましょう。
MyExceptionは自作例外クラスとなります。

class MyException(Exception):
    pass

def sample4():

    try:
        raise MyException("エラー発生!自由な記述が可能!!")
    except MyException as e:
        print(e)   #エラー発生!自由な記述が可能!!

実行結果はMyExceptionの引数の渡した内容が変数「e」に反映されます。

Exceptionから派生した自作例外を作成(引数無し)

例外クラスの引数に何も入れなかった場合の例です。
例外処理は発生させられますがprint関数では何も表示されません。

class MyException(Exception):
    pass

def sample5():

    try:
        raise MyException()
    except MyException as e:
        print(e)   #

Exceptionから派生した自作例外を作成【traceback.print_exc()】

例外情報を取得できる「traceback.print_exc()」を使用した結果が下記になります。

try:
    raise MyException()
except:
    import traceback
    traceback.print_exc()   #Traceback (most recent call last):
                            #  File "Exception_make.py", line 52, in sample6
                            #    raise MyException()
                            #MyException

例外発生の行数、例外クラス名、ファイル名と必要な情報は自作クラスでも取得可能です。

ソースコードはこちらから