カスタム例外
このレッスンでできるようになること。Exception を継承した自分の例外クラスを定義して、家計簿の業務的なエラーを型で表せるようになります。
ValueError や TypeError は Python が用意した一般的な例外です。ところが家計簿には「予算を超えた」という、Python が知らない事情のエラーがあります。これを ValueError で表すと、金額が読めないエラーと見分けがつきません。
そこで自分で例外クラスを作ります。Exception を継承した空のクラスを書くだけです。
class BudgetOverError(Exception):
passpass は「中身は何も足しません」という意味です。これだけで、raise BudgetOverError("予算を 2000 円超えています") と投げられますし、except BudgetOverError: で予算超過だけをねらって受け止められます。
自作の例外を用意すると、受け止める側のコードが読みやすくなります。「予算超過なら警告を出す、入力ミスなら登録し直させる」といった振り分けが、例外クラスの名前だけで表せるからです。エラーの種類を文字列の中身で判定する必要がなくなります。
名前は末尾を Error で終わらせるのが Python の習わしです。BudgetOverError、InvalidExpenseError のように、何が起きたのかが名前だけで伝わる語を選びます。
要件
- BudgetOverError は Exception を継承する
- check_budget は total が budget を超えたら BudgetOverError を投げる
- 投げるときのメッセージは 予算を 超過額 円超えています にする
- report は例外を受け止めて 警告 メッセージ を返し、正常なら 予算内です 残り 残額 円 を返す
入出力例
report(12000, 10000) → "警告 予算を 2000 円超えています"
report(8000, 10000) → "予算内です 残り 2000 円"
report(10000, 10000) → "予算内です 残り 0 円"ヒント
編集 LuaGate編集部