基礎・上級問題チェック
問題 28 /40
次のコードを実行した結果として、正しいものはどれか。
try:
raise NameError('未定義')
except NameError:
print('例外発生')
raise
print('処理継続')
選択 3
「例外発生」とプリントされた後、プログラムが終了する。
解説
選択肢3が正解です。
raise文は指定の例外を強制的に発生させられます。
また、raise文は例外を再送出できます。
問題文のコードを実行すると、以下のように表示されます。
-----------------------------------
例外発生
TraceBack (most recent call last):
File "(ファイルのパス)",line 2, in <module>
raise NameError('未定義')
NameError:未定義
-----------------------------------
try節でNameErrorを発生させ、except節で補足して「例外発生」を出力した後、5行目のraiseで例外を再送出しています。
except節で発生した例外は処理されないため、プログラムが終了します。
例外が送出されたことを記録して、後続の処理を止めたい場合は、問題文のように5行目のraiseで例外を再送出します。
なお、5行目の「raise」がなかった場合は、「例外発生」と表示された後、処理は止まらずに下のprint文に進み、「処理継続」と表示されます。
(公式書籍 p.90)