raise from
次のコードを実行したときの出力として、正しいものを1つ選べ。
try:
try:
1 / 0
except ZeroDivisionError as e:
raise ValueError("x") from e
except ValueError as e:
print(type(e.__cause__).__name__)
- A
ZeroDivisionError - B
ValueError - C
None - D
TypeError
正解と解説を見る
正解:A
raise 新しい例外 from 元の例外 で、原因の例外を明示できる。トレースバックに両方が表示される。from None で原因を隠せる。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `try:` | — |
| 2 | `try:` | — |
| 3 | `1 / 0` | — |
| 4 | `except ZeroDivisionError as e:` | — |
| 5 | `raise ValueError("x") from e` | — |
| 6 | `except ValueError as e:` | — |
| 7 | `print(type(e.__cause__).__name__)` | — |
| 分岐 | `except ZeroDivisionError as e:` | 実行される |
| 分岐 | `except ValueError as e:` | 実行される |
| 結果 | 実際の出力 | ZeroDivisionError |
- A
正しい。
raise ... from eで、元の例外が__cause__に記録される。 - B
誤り。
__cause__は元の例外。 - C
誤り。
from eで原因を指定している。 - D
誤り。関係のない例外。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。