カスタム例外

このレッスンでできるようになること。Exception を継承した自分の例外クラスを定義して、家計簿の業務的なエラーを型で表せるようになります。

ValueErrorTypeError は Python が用意した一般的な例外です。ところが家計簿には「予算を超えた」という、Python が知らない事情のエラーがあります。これを ValueError で表すと、金額が読めないエラーと見分けがつきません。

そこで自分で例外クラスを作ります。Exception を継承した空のクラスを書くだけです。

class BudgetOverError(Exception): pass

pass は「中身は何も足しません」という意味です。これだけで、raise BudgetOverError("予算を 2000 円超えています") と投げられますし、except BudgetOverError: で予算超過だけをねらって受け止められます。

自作の例外を用意すると、受け止める側のコードが読みやすくなります。「予算超過なら警告を出す、入力ミスなら登録し直させる」といった振り分けが、例外クラスの名前だけで表せるからです。エラーの種類を文字列の中身で判定する必要がなくなります。

名前は末尾を Error で終わらせるのが Python の習わしです。BudgetOverErrorInvalidExpenseError のように、何が起きたのかが名前だけで伝わる語を選びます。

要件

  1. BudgetOverError は Exception を継承する
  2. check_budget は total が budget を超えたら BudgetOverError を投げる
  3. 投げるときのメッセージは 予算を 超過額 円超えています にする
  4. report は例外を受け止めて 警告 メッセージ を返し、正常なら 予算内です 残り 残額 円 を返す

入出力例

report(12000, 10000)"警告 予算を 2000 円超えています" report(8000, 10000)"予算内です 残り 2000 円" report(10000, 10000)"予算内です 残り 0 円"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
学習モード

メモ

カスタム例外

⌘S で保存