Flask Academy · レッスン

カスタム例外クラスを送出する

JSONに対応付けるドメインエラーを定義します

レッスン 3/413 ステップ

「カスタム例外クラスを送出する」はCoddyKit上の無料Flask Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFlask Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Flask Academyコースには全4レッスンが含まれています。

ドメインを表すエラー

400のような番号は汎用的です。カスタム例外を使うと、支払いの失敗やクォータ超過など、実際の問題を名前で表せます。

例外をサブクラス化する

まず、Exceptionを継承するクラスを定義します。これにより、明確で自分で発生させられるエラーを作れます。

class PaymentError(Exception):
    pass

ステータスコードを追加する

クラスにstatus_code属性を設定すると、エラーが発生したときに送信するHTTPコードをハンドラーが判断できます。

class PaymentError(Exception):
    status_code = 402

メッセージを持たせる

コンストラクターで、人が読めるメッセージを保存します。後でハンドラーがそれを読み取り、レスポンスボディに設定できます。

def __init__(self, message):
    self.message = message

ビューで発生させる

問題が起きたときは、ビュー内で単にraiseしてエラーを発生させます。するとFlaskが対応するハンドラーを探します。

if not paid:
    raise PaymentError("Card declined")

カスタムクラスを処理する

独自のクラスに対するerrorhandlerを登録します。ハンドラーはインスタンスを受け取るため、メッセージとステータスコードの両方を読み取れます。

@app.errorhandler(PaymentError)
def on_pay(e):
    return e.message, e.status_code

そこからJSONを返す

APIでは、ハンドラー内でエラーをJSONに変換します。クライアントは、確実に解析できる構造化されたエラーを受け取れます。

return jsonify(error=e.message), e.status_code

複数のエラーに1つの基底クラスを使う

1つの基底クラスを作り、具体的なエラーにそれを継承させます。これで、1つのハンドラーですべてのエラー種別に対応できます。

class ApiError(Exception):
    pass

適切なデフォルト値を設定する

基底クラスに400などのデフォルトのstatus_codeを設定します。サブクラスでは、別のコードが必要な場合だけ上書きします。

class ApiError(Exception):
    status_code = 400

ロジックをビューから分離する

ドメインエラーを発生させれば、ビューを短く保てます。フォーマット処理はハンドラーが担当するため、各ビューは何が問題だったかを示すだけで済みます。

この方法が拡張しやすい理由

アプリが成長しても、カスタム例外によってエラー処理を1か所に整理できます。新しいエラー種別も、同じクリーンな処理の流れに組み込めます。

クイックチェック

ビューからドメインエラーを発生させるにはどうしますか?

まとめ

カスタム例外クラスにステータスコードとメッセージを持たせ、ビューで発生させ、整ったJSONに対応付けました。すばらしいです!

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「カスタム例外クラスを送出する」レッスンは無料ですか?

はい。「カスタム例外クラスを送出する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Flask Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Flask Academyコースには全4レッスンが含まれています。

「カスタム例外クラスを送出する」で何を学びますか?

JSONに対応付けるドメインエラーを定義します ブラウザで直接実行するハンズオンコードでFlask Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Flask Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFlask Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「カスタム例外クラスを送出する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFlask Academyレッスンでコードを書いて実行できますか?

はい。すべてのFlask Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. abortとHTTPエラーコード
  2. errorhandler関数を登録する
  3. カスタム例外クラスを送出する
  4. 統一されたJSONエラーエンベロープ
← Flask Academyに戻る