class TooManyBooksError(Exception): # 新しい例外クラスを定義
pass
def checkout_books(user, num_books):
if num_books > 5:
# ユーザーが5冊以上の本を借りようとした場合、例外を発生させる
raise TooManyBooksError('You cannot check out more than 5 books at a time.') # カスタム例外を発生
# それ以外の場合は、本をユーザーのアカウントに追加
user.books += num_books
もしcheckout_books(user, 7)の行でTooManyBooksErrorが発生した場合、プログラムはそれを捕捉し、エラーメッセージ「You cannot check out more than 5 books at a time.」を表示します。こうすることで、エラーを適切に処理し、プログラムを継続して実行できます。
class TooManyBooksError(Exception):
pass
# 毎回メッセージを渡す必要がある
raise TooManyBooksError('You tried to check out 7 books, but the limit is 5!')
# 長期的にはこれは良くないアイデア
👍 より良いアプローチ – 動的な詳細を例外クラスに渡す方法:
class TooManyBooksError(Exception):
def __init__(self, attempted, limit=5):
self.attempted = attempted
self.limit = limit
# データからエラーメッセージを構築
self.message = f'You tried to check out {self.attempted} books, but the limit is {self.limit}.'
super().__init__(self.message)
# 例外を発生させるとき、関連するデータだけを渡す
raise TooManyBooksError(7)
しかし、すべての人が市のデータベースに登録されているとは限りません。もしプログラムがデータベースで名前を見つけられない場合、NameNotFoundErrorというカスタム例外を発生させ、適切なエラーメッセージ {name} not found in the database を出力する必要があります。このメッセージはNameNotFoundErrorクラス内で作成してください。
入力
出力
5
Alice - 24
Bob - 32
Charlie - 21
Daisy - 27
Edgar - 30
Edgar
Edgar - 30
5
Alice - 24
Bob - 32
Charlie - 21
Daisy - 27
Edgar - 30
George
NameNotFoundError: George not found in the database.