コース一覧
    Pythonエラー・データ形式
    例外の階層

    Pythonエラー・データ形式

    例外処理とデータ形式を深め、異なる入力を検証し変換する処理を設計できるようにします。

    1
    エラー処理の設計
    01. 例外の階層15分
    02. raiseで例外を投げる15分
    03. カスタム例外15分
    04. finallyとelse15分
    05. assertで前提を守る15分
    06. つくる 入力検証の例外設計20分
    07. 第5章クイズ10分
    2
    ファイルとデータ形式
    01. csvモジュール15分
    02. JSONで保存15分
    03. JSONを読み込む15分
    04. pathlibでパス操作15分
    05. 文字コード15分
    06. つくる JSON保存へ移行20分
    07. 第6章クイズ10分

    例外の階層

    このレッスンでできるようになること。例外どうしの親子関係を読み取り、家計簿の入力チェックで捕まえる例外をできるだけ狭く書けるようになります。

    Python の例外はすべてクラスで、たどっていくと Exception にたどり着きます。文字列を数値に変えられないときの ValueError、型が噛み合わないときの TypeError、0 で割ったときの ZeroDivisionError は、どれも Exception の子孫です。この上下関係を例外の階層と呼びます。

    階層を知っていると except の書き方が変わります。except Exception: と書けばあらゆる異常を受け止められますが、想定していなかったバグまで一緒に握りつぶしてしまい、あとから原因を追えなくなります。

    Python

    try:
        amount = int("やすい")
    except ValueError:
        print("金額として読めません")

    except の節は上から順に照らし合わされ、最初に当てはまったものだけが動きます。ですから狭い例外を先に、広い例外を後ろに並べます。逆に並べると広いほうが先に当たってしまい、狭い節は永遠に出番がありません。

    家計簿の金額欄では「文字が混ざっていた」と「そもそも値が入っていない」を区別したい場面がよく出てきます。前者は ValueError、後者は TypeError として届くので、書き分けておくと利用者に返すメッセージも親切になります。

    要件

    1. 整数に直せたときはその整数を返す
    2. 数値として読めないときは 金額として読めません を返す
    3. それ以外の例外のときは そのほかのエラーです を返す
    4. 例外を関数の外に投げっぱなしにしない

    ヒント

    int(text) を try の中に置きます

    狭い except を先に、広い except Exception を後ろに書きます

    int(None) は ValueError ではなく TypeError になります

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • raiseで例外を投げる

      raise で異常を自分から通知し、マイナス金額を弾きます。

    • カスタム例外

      Exception を継承した BudgetOverError を定義して使います。

    • finallyとelse

      finally と else で、後始末と正常時の処理を書き分けます。

    • assertで前提を守る

      assert で集計前のデータが壊れていないことを検査します。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • クラスデータと振る舞いを束ねる単位
    • 階層ネットワークを役割ごとに積み重ねた構造
    • 関数処理に名前を付けて再利用できる単位
    main.py
    エディタを読み込んでいます

    メモ

    例外の階層

    ⌘S で保存