AI資格ドリル
資格を選ぶ↓

用語比較

raiseとraise ... fromの違い|例外の連鎖の表示(Python3基礎)

except節の中で別の例外を送出すると、処理中だった元の例外がその例外に添えられて、エラーメッセージに含まれます。raiseにfrom節を付けると、元の例外が直接の原因だと明示できます。from Noneを付けると、この自動の連鎖を無効にできます。

Python公式チュートリアル8.5「Exception Chaining」は、この3つの書き方を、短い例で説明しています。違いは、トレースバックに出る中間の一文です。自動の連鎖なら During handling…、fromなら direct cause…、from Noneなら連鎖なしと覚えると読み分けられます。

Python3エンジニア認定基礎試験は、公式チュートリアルの内容を章ごとの出題率で出題する形で、第8章のエラーと例外も範囲です。この記事では、チュートリアルの例を使って、3つの書き方の表示の差を確認します。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

raise(fromなし)

except節の中で未処理の例外が起きると、処理中の例外が添えられ、エラーメッセージに含まれる。中間の一文は「During handling of the above exception, another exception occurred:」。

raise ... from exc

ある例外が別の例外の直接の結果であることを示す。変換して送出するときに使える。中間の一文は「The above exception was the direct cause of the following exception:」。

raise ... from None

自動の例外の連鎖を無効にする書き方。元の例外はトレースバックに出ない。

違いを表で確認

比較軸raise(fromなし)raise ... from exc
書き方raise RuntimeError("unable to handle error")raise RuntimeError('Failed to open database') from exc
トレースバックの中間の一文During handling of the above exception, another exception occurred:The above exception was the direct cause of the following exception:
元の例外の扱い処理中の例外が添えられ、エラーメッセージに含まれる直接の原因として明示される。from Noneなら連鎖が無効になる

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

トレースバックに2つの例外が出て、何が起きたのか分からない人

except節の中で別の例外が起きると、元の例外も一緒に表示されます。中間の一文を見ると、自動の連鎖か、fromによる明示かを区別できます。

02

fromを付けるかどうか迷う人

公式は、from節は例外を変換するときに役立つとしています。元の例外を表示したくないときは、from Noneで連鎖を無効にできます。

具体例で使い分ける

例 1

チュートリアル8.5の自動の連鎖

open("database.sqlite") が失敗したあと、except OSError の中で RuntimeError("unable to handle error") を送出します。

  • FileNotFoundError の表示のあとに、During handling of the above exception, another exception occurred: と出ます。
  • そのあとに、RuntimeError: unable to handle error が続きます。

結論: fromを付けなくても、処理中の例外は添えられて表示されます。

例 2

チュートリアル8.5の from exc と from None

except ConnectionError as exc の中で raise RuntimeError('Failed to open database') from exc とします。別の例では、except OSError の中で raise RuntimeError from None とします。

  • from exc では、The above exception was the direct cause of the following exception: と出ます。
  • from None の例では、トレースバックに RuntimeError だけが出ます。

結論: fromは原因を明示し、from Noneは連鎖を無効にします。

問題文から答えを選ぶ手順

  1. 1

    except節の中で送出しているか見る

    except節の外で送出した例外には、この連鎖は付きません。以下はexcept節の中での話です。

  2. 2

    中間の一文を読む

    During handling…なら自動の連鎖、direct cause…ならfrom節つきです。

  3. 3

    元の例外が出ていなければfrom Noneを疑う

    トレースバックに元の例外が出ていないときは、from Noneで連鎖が無効になっている可能性があります。

試験での見分け方

  • 1except節の中で未処理の例外が起きると、処理中の例外が添えられる。
  • 2raise ... from で、ある例外が別の例外の直接の結果であることを示せる。
  • 3raise ... from None で、自動の例外の連鎖を無効にできる。
  • 4from節の対象は、例外インスタンスかNoneでなければならない。

誤答しやすい選択肢

fromを付けないと、元の例外が失われると考える

修正: except節の中で別の例外を送出すると、処理中の例外が添えられてエラーメッセージに含まれます。

from Noneを付けても元の例外が表示されると考える

修正: from Noneは自動の例外の連鎖を無効にする書き方です。

確認問題

Q1自動の連鎖で、トレースバックの中間に出る一文は?

答え: During handling of the above exception, another exception occurred:

チュートリアル8.5の例で、except節の中の未処理の例外に出る一文です。

Q2raise ... from exc を付けたとき、中間に出る一文は?

答え: The above exception was the direct cause of the following exception:

チュートリアル8.5の例です。ある例外が別の例外の直接の結果であることを示します。

Q3自動の例外の連鎖を無効にする書き方は?

答え: raise ... from None

チュートリアル8.5が、from Noneの慣用句で自動の連鎖を無効にできると説明しています。

到達チェック

  • except節の中で別の例外を送出したときの表示を説明できる
  • fromを付けたときの中間の一文を言える
  • from Noneの役割を説明できる

同じ資格で次に知りたいこと

よくある質問

Qraise ... from とは?

A

ある例外が別の例外の直接の結果であることを示す、raise文のfrom節です。例外を変換するときに使えます。

Qfrom Noneとは?

A

自動の例外の連鎖を無効にする書き方です。

Qfromなしとfromありの違いは?

A

トレースバックの中間の一文です。fromなしは During handling…、fromありは direct cause… と出ます。

QPython3基礎試験の範囲?

A

公式の出題範囲は公式チュートリアルの章単位で、第8章のエラーと例外と、8.5の例外の連鎖を含みます。出題の形式は受験前に公式の案内で確認してください。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)