Kodrill

エラーと例外

Python 3 エンジニア認定基礎試験

try/except/else/finally・複数の例外・raise・例外の階層・独自例外

問題数
12 問
合格ライン
70%
実行して確認済み
11 問
この分野の要点を読む6 章・約 6 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 7 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

エラーと例外の要点

内容の確認日: 2026-10-04

この分野は「Pythonチュートリアル」の第 8 章 (エラーと例外) に対応します。例外が起きたときに、try 文のどの節がどの順番で実行されるかを追う問題が中心です。

特に、else 節が実行される条件と、finally 節が return よりも先に実行される点は、よく問われます。

構文エラーと例外

Python のエラーには 2 種類あります。

・構文エラー (SyntaxError): コロンの書き忘れやインデントの誤りなど、文法の誤り。プログラムを実行する前に見つかるので、ファイルの中のどのコードも実行されない ・例外: 文法は正しいが、実行中に起きるエラー。ZeroDivisionError (0 で割った)・NameError (未定義の名前)・TypeError (型が合わない)・ValueError (値が不正)・KeyError・IndexError など

Python
print("ここは実行されない")​if True    print("x")
ターミナル
python3 main.py

例外が発生: SyntaxError

1 行目の print は正しいコードですが、4 行目の if にコロンがないため、ファイル全体が実行されません。例外は処理しないとプログラムが止まり、トレースバック (例外が起きた場所と種類) が表示されます。

try 文の流れ

例外は try 文で処理します。各節が実行される条件は次のとおりです。

・try 節: まず実行される。例外が起きたら、残りの処理を飛ばして except 節を探す ・except 節: 起きた例外の型に合うものが上から順に 1 つだけ実行される ・else 節: try 節で例外が起きなかったときだけ実行される ・finally 節: 例外の有無にかかわらず、必ず最後に実行される

Python
def parse(text):    try:        value = int(text)    except ValueError:        print(text, "→ 数値ではない")    else:        print(text, "→", value)    finally:        print("後始末")​parse("12")parse("x")
ターミナル
python3 main.py
12 → 12
後始末
x → 数値ではない
後始末

finally 節は、try 節の中で return した場合も、関数を抜ける前に実行されます。

Python
def f():    try:        return "try の戻り値"    finally:        print("finally")​print(f())
ターミナル
python3 main.py
finally
try の戻り値

複数の例外の捕捉

複数の例外を 1 つの except でまとめて捕捉するには、except (KeyError, IndexError): のようにタプルで並べます。except ValueError as e: と書くと、例外のオブジェクトを変数 e で受け取れます。

例外にはクラスの階層があり、except Exception: はほとんどの例外 (Exception のサブクラス) を捕捉します。except は上から順に調べられるので、範囲の広い例外を先に書くと、後ろの except は実行されません。型を書かない except: はすべての例外を捕捉しますが、予期しない誤りまで隠してしまうので、使うときは注意が必要です。

処理されなかった例外は、呼び出し元へ伝わっていきます。内側の try に合う except がなければ、外側の try の except で捕捉されます。

raise と独自の例外

raise 文で、例外を自分で発生させられます。except 節の中で引数なしの raise を書くと、捕捉した例外をそのまま投げ直します。

独自の例外は、Exception (またはそのサブクラス) を継承したクラスとして作ります。基底の例外クラスを作り、個別の例外をそのサブクラスにしておくと、except 基底クラス: でまとめて捕捉できます。

Python
class AppError(Exception):    pass​class InputError(AppError):    def __init__(self, field):        super().__init__(f"{field} が不正です")        self.field = field​try:    raise InputError("age")except AppError as e:    print(type(e).__name__, e, e.field)​try:    [1, 2][5]except (KeyError, IndexError) as e:    print("捕捉:", type(e).__name__)​raise ValueError("最後は捕捉しない")
ターミナル
python3 main.py
InputError age が不正です age
捕捉: IndexError

例外が発生: ValueError

InputError は AppError のサブクラスなので、except AppError で捕捉されます。最後の ValueError はどこでも捕捉されないので、トレースバックを表示してプログラムが止まります。

後始末と with 文

ファイルなどの後始末は finally 節に書けますが、with 文を使うと、ブロックを抜けるときに (例外が起きても) 自動で後始末が行われます。with open(...) as f: でファイルが自動で閉じられるのは、この仕組みによるものです。

試験でよくある引っかけ

  • 構文エラーのあるファイル

    構文エラーがあると、エラーの行より前のコードも含めて、ファイル全体が実行されません。

  • else 節の実行条件

    else 節は try 節で例外が起きなかったときだけ実行されます。例外が起きて except で処理した場合は実行されません。

  • finally と return

    try 節で return しても、関数を抜ける前に finally 節が実行されます。

  • 複数の例外のまとめ方

    except (KeyError, IndexError): のようにタプルで書きます。

  • except の順番

    上から順に調べ、最初に合った 1 つだけを実行します。except Exception: を先に書くと、後ろの except には届きません。

  • 独自の例外の基底クラス

    独自の例外は Exception を継承して作ります。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、実際に実行して結果を確認しています。