Django の例外

revision-up-to:17812 (1.4)

Django は多くの Python 標準の例外に加え、いくつかの Django 固有の例外を送出します。

Django 固有の例外

ObjectDoesNotExist と DoesNotExist

exception DoesNotExist
exception ObjectDoesNotExist

DoesNotExist 例外は指定されたクエリーパラメータでオブジェクトが 見つからなかったときに送出されます。

ObjectDoesNotExistdjango.core.exceptions の中で定義されています。DoesNotExist は、ObjectDoesNotExist 例外をベースにしたサブクラスです。これは、どのタイプのオブジェクトを 見つけられなかったのかを特定する手段として全モデルクラスで提供されています (訳注: モデルクラス FooBar がある場合、 Foo.DoesNotExist および Bar.DoesNotExist という ObjectDoesNotExist を継承したクラスが定義されます)。

ObjectDoesNotExistDoesNotExist のさらなる情報について、 get() を参照してください。

MultipleObjectsReturned

exception MultipleObjectsReturned

MultipleObjectsReturned 例外は、一つのオブジェクトが期待されるにも 関わらず複数のオブジェクトが得られた場合に、クエリーによって送出されます。 この例外のベースとなるバージョンは django.core.exceptions の中で 定義されています。そして各モデルクラスはそれをサブクラス化した例外を 含んでおり、どのタイプのオブジェクトが複数のオブジェクトを 返したのかを特定するために使えます (訳注: モデルクラス FooBar がある場合、送出された例外が Foo.MultipleObjectsReturned であれば複数の Foo のオブジェクトが 返されたと判断できます)。

さらなる情報について get() を参照してください。

SuspiciousOperation

exception SuspiciousOperation

SuspiciousOperation 例外は、セキュリティ観点上、不審と考えられる 操作をユーザが行った場合に送出されます。たとえば、セッションクッキーが 改変された場合などです。

PermissionDenied

exception PermissionDenied

PermissionDenied 例外は、要求したアクションを実行する権限をユーザが 持っていない場合に送出されます。

ViewDoesNotExist

exception ViewDoesNotExist

ViewDoesNotExist 例外は、要求されたビューが存在しない場合に django.core.urlresolvers によって送出されます。

MiddlewareNotUsed

exception MiddlewareNotUsed

MiddlewareNotUsed 例外は、サーバ設定にあるミドルウェアの中に 使われていないものがある場合に送出されます。

ImproperlyConfigured

exception ImproperlyConfigured

ImproperlyConfigured 例外は、 Django の設定の何かが正しくない場合に 送出されます – たとえば settings.py の値が不正であったり、 書式不正である場合が挙げられます。

FieldError

exception FieldError

FieldError 例外は、モデルのフィールドに関係した問題がある場合に 送出されます。いくつかの理由が考えられるます:

  • モデルのフィールドが抽象ベースクラスの同名のフィールドと衝突している
  • 並べ替え処理により無限ループが発生した
  • フィルターパラメータ中のキーワードが解釈できない
  • クエリーパラメータ中のキーワードからフィールドを特定できない
  • 指定されたフィールドでの結合 (join) は許可されていない
  • フィールド名が不正
  • クエリーが不正な order_by 引数を含んでいる

ValidationError

exception ValidationError

ValidationError 例外は、フォームやモデルフィールドの検証 (validation) に失敗した場合に送出されます。検証についての詳細は フォームやフィールドの検証モデルフィールドの検証 、そして バリデータのリファレンス を参照してください。

NoReverseMatch

exception NoReverseMatch

NoReverseMatch 例外は、指定パラメータに適合する URL を URLconf から特定できなかった場合に django.core.urlresolvers によって送出されます。

データベースの例外

Django は標準 (訳注: PEP 249) のデータベース例外である DatabaseErrorIntegrityError をラッピングするため、ユーザは Django 用のコードにて これらのクラスの共通の実装を利用できます。これらのデータベース例外は django.db の中で定義されています。 (訳注: Django は標準 PEP 249 に従って例外クラスを定義しており、どのデータベース バックエンドを利用する場合でもこれらを使用します。なおこれらの例外は、 送出のきっかけになった「データベースバックエンドが送出した例外オブジェクト」を ラッピングする、つまり属性を引き継ぎます。)

exception DatabaseError
exception IntegrityError

Django のデータベース例外用のラッパーは、元になったデータベース例外と完全に 同じ振る舞いをします。さらなる情報については Python データベース API 仕様 v2.0 (PEP 249) を参照してください。

トランザクション例外

exception TransactionManagementError

TransactionManagementError は、データベーストランザクションに関係した あらゆる問題に対して送出されます。このクラスは django.db.transaction の中で定義されています。

Python の例外

Django は、 Python 標準の例外を送出した方が適切な場面においては、そうします。 さらなる情報については Python のドキュメントで標準 exceptions を参照してください。