コース一覧
    Pythonエラー・データ形式
    assertで前提を守る

    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分

    assertで前提を守る

    このレッスンでできるようになること。assert で「ここまで来たら必ず成り立っているはず」の前提を書き、集計前に家計簿のデータが壊れていないか検査できるようになります。

    assert 条件, "メッセージ" と書くと、条件が偽のときに AssertionError が起こります。条件が真なら何も起きません。

    Python

    expenses = [["ノート", 250], ["牛乳", 180]]
    assert len(expenses) > 0, "データが1件もありません"

    raise との違いは向いている相手です。raise は利用者の入力ミスのように「起こりうる異常」を伝えるためのもの、assert は「起きたらプログラムの作りが間違っている」前提の確認です。集計関数に空のリストや負の金額が届いたなら、それは呼び出し側のバグですから assert が向いています。

    もう一つ大事な性質があります。assert は Python を最適化モードで動かすと丸ごと無視されます。ですから利用者の入力検証を assert だけに頼ってはいけません。入力検証は raise、内部の前提確認は assert と覚えます。

    AssertionError も例外なので、except AssertionError as e: で受け止められます。まとめ役の関数で受け止めて、どの前提が崩れたのかを文字列で返すようにすると、原因を追いやすくなります。

    要件

    1. 件数が 0 のときは データが1件もありません という前提崩れにする
    2. 金額がマイナスの支出があるときは 品名 の金額がマイナスです という前提崩れにする
    3. 前提が崩れたら 検査に失敗しました メッセージ を返す
    4. すべて通ったら 検査を通りました 件数 件 を返す

    ヒント

    assert 条件, "メッセージ" の形で書きます

    except AssertionError as e: で受け止め、str(e) がメッセージになります

    for name, amount in expenses: と書くと 2 要素を同時に取り出せます

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

    関連レッスン

    • つくる 入力検証の例外設計

      入力の層で検証して投げ、上位で捕らえる形に整理します。

    • 第5章クイズ

      例外設計の理解を確認します。

    • csvモジュール

      手書きの split をやめて csv モジュールに載せ替えます。

    main.py
    エディタを読み込んでいます

    メモ

    assertで前提を守る

    ⌘S で保存