Python 模擬試験

Python実践 模擬試験 第3回 問10・3章 Pythonの言語仕様(例外処理)

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__)
  1. A

    ZeroDivisionError

  2. B

    ValueError

  3. C

    None

  4. 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

学習のポイント:例外の連鎖は、__cause__ と __context__ に記録される。

この問題を演習で解く →

問題一覧へ

このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。