進捗

4/4 13:30~16:00 p.340~p.343

意図的に例外を発生させるraiseのコードがテキストに書いてなかったので、このサイトを見て試し学習した。

サイトに書いてある様に10/0の中身はZeroDvisionClassという例外クラスが起こり、division by zeroという例外オブジェクトを持つ。またサイトのexceptブロックでクラス名を指定せずに変数を扱う箇所では、issubclass関数でもわかる通り、Exceptionというクラスがあらゆる例外クラスの親クラスになっている。


def error():
    try:
        raise NameError("A","B")
    except NameError as n:
        print(n.args[0])
        raise
#表示     
"""
A
NameError: ("A","B")
"""

公式ドキュメントを読むとexceptブロックで例外クラスの後ろに変数をつけることで、例外クラスのインスタンスを立てれる。instance.argsにインスタンス生成時の引数が入る。上記のコードなら("A","B")

上記のコードではexceptブロックのraiseがないとエラーメッセージは起きない。今回学習したサイトに書いてある説明の通り、tryブロックは試金石で例外なら出力はされずプログラムは止まらない。
raise NameError("A","B")と書いてあるので例外が発生していると判断しexceptブロックに移る。その中でraiseと書いてあるので出力が行われた。こういう流れだと思う。
raiseは例外なので例外が起きた時に進むexceptブロックに書く。raiseとtryブロックに書いてあるならそれは例外で、tryブロックに書いても実行されずexceptブロックに移動する。