例外の連鎖
次のコードの raise ... from exc の働きとして、最も適切なものを1つ選べ。
try:
open("database.sqlite")
except OSError as exc:
raise RuntimeError("データベースを開けません") from exc
- A
元の例外 OSError を、何もなかったことにして消す。
- B
RuntimeError を発生させずに、処理を続ける。
- C
元の例外を、そのまま再送出する。
- D
新しい例外 RuntimeError を送出し、その直接の原因が OSError であることを示す(例外の連鎖)。
正解と解説を見る
正解:D
raise 新しい例外 from 元の例外 で、例外の原因を明示して連鎖させられる。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `try:` | — |
| 2 | `open("database.sqlite")` | — |
| 3 | `except OSError as exc:` | — |
| 4 | `raise RuntimeError("データベースを開けません") from exc` | — |
| 分岐 | `except OSError as exc:` | 実行される |
| 結果 | 出力と例外 | 例外 RuntimeError: データベースを開けません |
- A
誤り。元の例外の情報は残る。
- B
誤り。RuntimeError が送出される。
- C
誤り。元の例外をそのまま再送出するなら、引数なしの
raiseを使う。 - D
正しい。トレースバックには、両方の例外が表示される。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。