Djangoの例外
Djangoは、標準のPython例外だけでなく、独自の例外もいくつか発生します。
Djangoコアの例外
Djangoコア例外クラスはdjango.core.exceptions
で定義されています。
AppRegistryNotReady
- exception AppRegistryNotReady
- この例外は、ORMを初期化するアプリの読み込みプロセスが完了する前にモデルを使用しようとすると発生します。
ObjectDoesNotExist
- exception ObjectDoesNotExist
Model.DoesNotExist 例外の基本クラス。
ObjectDoesNotExist
のtry/except
は、すべてのモデルの DoesNotExist 例外をキャッチします。get()を参照してください。
EmptyResultSet
- exception EmptyResultSet
EmptyResultSet
は、クエリが結果を返さない場合、クエリの生成中に発生する可能性があります。 ほとんどのDjangoプロジェクトではこの例外は発生しませんが、カスタムルックアップと式を実装するのに役立つ場合があります。
FieldDoesNotExist
- exception FieldDoesNotExist
FieldDoesNotExist
例外は、要求されたフィールドがモデルまたはモデルの親に存在しない場合に、モデルの_meta.get_field()
メソッドによって発生します。
MultipleObjectsReturned
- exception MultipleObjectsReturned
Model.MultipleObjectsReturned 例外の基本クラス。
MultipleObjectsReturned
のtry/except
は、すべてのモデルの MultipleObjectsReturned 例外をキャッチします。get()を参照してください。
SuspiciousOperation
- exception SuspiciousOperation
SuspiciousOperation 例外は、セッションCookieの改ざんなど、セキュリティの観点から疑わしいと見なされる操作をユーザーが実行した場合に発生します。
SuspiciousOperation
のサブクラスは次のとおりです。DisallowedHost
DisallowedModelAdminLookup
DisallowedModelAdminToField
DisallowedRedirect
InvalidSessionKey
RequestDataTooBig
SuspiciousFileOperation
SuspiciousMultipartForm
SuspiciousSession
TooManyFieldsSent
SuspiciousOperation
例外がWSGIハンドラーレベルに達すると、Error
レベルでログに記録され、 HttpResponseBadRequest になります。 詳細については、ロギングドキュメントを参照してください。
PermissionDenied
- exception PermissionDenied
- PermissionDenied 例外は、ユーザーが要求されたアクションを実行する権限を持っていない場合に発生します。
ViewDoesNotExist
- exception ViewDoesNotExist
- ViewDoesNotExist 例外は、要求されたビューが存在しない場合に django.urls によって発生します。
ImproperlyConfigured
- exception ImproperlyConfigured
- ImpproperlyConfigured 例外は、Djangoが何らかの理由で不適切に構成されている場合、たとえば
settings.py
の値が正しくないか解析できない場合に発生します。
FieldError
- exception FieldError
- モデルフィールドに問題がある場合、 FieldError 例外が発生します。 これはいくつかの理由で発生する可能性があります。
- モデル内のフィールドが、抽象基本クラスの同じ名前のフィールドと衝突します
- 無限ループは順序付けによって発生します
- フィルタパラメータからキーワードを解析できません
- クエリパラメータのキーワードからフィールドを特定できません
- 指定されたフィールドへの結合は許可されていません
- フィールド名が無効です
- クエリに無効なorder_by引数が含まれています
ValidationError
- exception ValidationError
- ValidationError 例外は、データがフォームまたはモデルフィールドの検証に失敗した場合に発生します。 検証の詳細については、フォームとフィールドの検証、モデルフィールドの検証、およびバリデーターリファレンスを参照してください。
NON_FIELD_ERRORS
- NON_FIELD_ERRORS
フォームまたはモデルの特定のフィールドに属さないValidationError
は、NON_FIELD_ERRORS
として分類されます。 この定数は、フィールドをそれぞれのエラーリストにマップする辞書のキーとして使用されます。
RequestAborted
- exception RequestAborted
バージョン3.0の新機能。
RequestAborted 例外は、ハンドラーによって読み込まれているHTTPボディが途中で切断されてクライアント接続が閉じられた場合、またはクライアントがデータを送信せずにサーバーが接続を閉じるタイムアウトに達した場合に発生します。
これはHTTPハンドラーモジュールの内部にあり、他の場所で表示される可能性はほとんどありません。 HTTP処理コードを変更している場合、ソケットが正常に閉じられていることを確認するために、中止された要求が発生したときにこれを発生させる必要があります。
SynchronousOnlyOperation
- exception SynchronousOnlyOperation
バージョン3.0の新機能。
SynchronousOnlyOperation 例外は、同期Pythonコードでのみ許可されるコードが非同期コンテキスト(非同期イベントループが実行されているスレッド)から呼び出された場合に発生します。 Djangoのこれらの部分は、通常、スレッドセーフに大きく依存して機能し、同じスレッドを共有するコルーチンでは正しく機能しません。
非同期スレッドから同期のみのコードを呼び出そうとしている場合は、同期スレッドを作成してその中で呼び出します。 これは、 asgiref.sync.sync_to_async()を使用して実現できます。
URLリゾルバーの例外
URLリゾルバーの例外はdjango.urls
で定義されています。
Resolver404
- exception Resolver404
- Resolver404 例外は、
resolve()
に渡されたパスがビューにマップされていない場合、 resolve()によって発生します。 これは django.http.Http404 のサブクラスです。
NoReverseMatch
- exception NoReverseMatch
- NoReverseMatch 例外は、指定されたパラメーターに基づいてURLconf内の一致するURLを識別できない場合、 django.urls によって発生します。
データベースの例外
データベース例外はdjango.db
からインポートできます。
Djangoは、標準のデータベース例外をラップして、Djangoコードにこれらのクラスの共通実装が保証されるようにします。
- exception Error
- exception InterfaceError
- exception DatabaseError
- exception DataError
- exception OperationalError
- exception IntegrityError
- exception InternalError
- exception ProgrammingError
- exception NotSupportedError
データベース例外のDjangoラッパーは、基になるデータベース例外とまったく同じように動作します。 詳細については、 PEP 249 、PythonデータベースAPI仕様v2.0を参照してください。
PEP 3134 に従って、__cause__
属性が元の(基になる)データベース例外とともに設定され、提供された追加情報へのアクセスを許可します。
- exception models.ProtectedError
django.db.models.PROTECT を使用するときに参照されるオブジェクトが削除されないようにするために発生しました。 models.ProtectedError は、 IntegrityError のサブクラスです。
Http例外
Http例外はdjango.http
からインポートできます。
トランザクションの例外
トランザクション例外はdjango.db.transaction
で定義されています。
TransactionManagementError
- exception TransactionManagementError
- TransactionManagementError は、データベーストランザクションに関連するすべての問題に対して発生します。
フレームワークの例外のテスト
django.test
パッケージによって提供される例外。
RedirectCycleError
- exception client.RedirectCycleError
- RedirectCycleError は、テストクライアントがループまたはリダイレクトの長すぎるチェーンを検出したときに発生します。
Pythonの例外
Djangoは、必要に応じて組み込みのPython例外も発生させます。 bltin-exceptions の詳細については、Pythonのドキュメントを参照してください。