用語比較
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冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
トレースバックに2つの例外が出て、何が起きたのか分からない人
except節の中で別の例外が起きると、元の例外も一緒に表示されます。中間の一文を見ると、自動の連鎖か、fromによる明示かを区別できます。
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
except節の中で送出しているか見る
except節の外で送出した例外には、この連鎖は付きません。以下はexcept節の中での話です。
- 2
中間の一文を読む
During handling…なら自動の連鎖、direct cause…ならfrom節つきです。
- 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の役割を説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- str()とrepr()の違い|読みやすい表現か、インタプリタが読める表現か(Python3基礎)
str()とrepr()の違いを、表現の目的で整理します。Python公式チュートリアル7.1の記述、str(s)とrepr(s)の結果の差、確認問題つき。
- doctestとunittestの違い|テストの書き場所と使い分け(Python3基礎)
doctestはdocstringに埋め込んだ呼び出し例を検証し、unittestは別ファイルのTestCaseで網羅的に検証します。Python公式チュートリアル10.11の例で整理。確認問題つき。
- open()のモード 'w' と 'a' の違い|上書きか、末尾に追加か(Python3基礎)
open()のモード 'w' と 'a' の違いを、既存ファイルの扱いで整理します。Python公式チュートリアル7.2の記述、'r'・'r+'との対応、省略時のモード、確認問題つき。
よくある質問
Qraise ... from とは?
ある例外が別の例外の直接の結果であることを示す、raise文のfrom節です。例外を変換するときに使えます。
Qfrom Noneとは?
自動の例外の連鎖を無効にする書き方です。
Qfromなしとfromありの違いは?
トレースバックの中間の一文です。fromなしは During handling…、fromありは direct cause… と出ます。
QPython3基礎試験の範囲?
公式の出題範囲は公式チュートリアルの章単位で、第8章のエラーと例外と、8.5の例外の連鎖を含みます。出題の形式は受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
