メインコンテンツへ
アルゴリズムとプログラミング例外処理(try-catch-finally)

次の疑似コードを実行したとき、出力される文字列の順序として正しいものはどれか。 ``` try: print("A") raise Exception("エラー") print("B") catch(e): print("C") return finally: print("D") ```

ア.A → B → C → D
イ.A → D → C
ウ.A → C
エ.A → C → D正解

解説

finally ブロックは「どんなことがあっても最後に必ず実行される掃除係」。return で帰ろうとしても、例外が起きても、finally は必ず関数を出る前に割り込んで実行される。catch の中で print("C") した後 return しようとするが、その前に finally が D を出力する。

なぜ エ が正解か

実行順序を追う。①try ブロックに入り "A" を出力。②例外が発生し、"B" はスキップ(例外発生以降の try ブロックは実行されない)。③catch ブロックに移り "C" を出力。④catch 内に return があるが、finally ブロックは return が完了する前に必ず割り込んで実行されるため "D" を出力。⑤その後 return が完了しメソッドを抜ける。出力順序は A → C → D となる。

なぜ ア は間違いか

"B" は例外発生後にはスキップされる。raise/throw 以降の try ブロック内コードは実行されない。例外発生後の制御フローを誤解した誤り。

なぜ イ は間違いか

finally が catch より先に実行されることはない。例外発生後は catch → finally の順に実行される。D が C より先に出力されることはない。

なぜ ウ は間違いか

return があっても finally ブロックは必ず実行される。finally ブロックが「return で抜ける前に必ず呼ばれる」という保証を知らない誤り。finally なしと混同した誤り。

出典: AI生成問題(学習用)