Django 异常 — Django 文档
Django 异常
Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常
Django 核心异常类在 django.core.exceptions
中定义。
ObjectDoesNotExist
- exception ObjectDoesNotExist
DoesNotExist 异常的基类;
ObjectDoesNotExist
的try/except
将捕获所有模型的 DoesNotExist 异常。有关 ObjectDoesNotExist 和 DoesNotExist 的更多信息,请参阅 get()。
EmptyResultSet
- exception EmptyResultSet
EmptyResultSet
如果查询不返回任何结果,可能会在查询生成期间引发。 大多数 Django 项目不会遇到此异常,但它可能对实现自定义查找和表达式有用。
FieldDoesNotExist
- exception FieldDoesNotExist
FieldDoesNotExist
异常由模型的_meta.get_field()
方法引发,当请求的字段不存在于模型或模型的父级时。
MultipleObjectsReturned
- exception MultipleObjectsReturned
MultipleObjectsReturned 异常由查询引发,如果只需要一个对象,但返回多个对象。 django.core.exceptions 中提供了此异常的基本版本; 每个模型类都包含一个子类版本,可用于标识已返回多个对象的特定对象类型。
有关更多信息,请参阅 get()。
SuspiciousOperation
- exception SuspiciousOperation
SuspiciousOperation 异常在用户执行了从安全角度应该被视为可疑的操作时引发,例如篡改会话 cookie。
SuspiciousOperation
的子类包括:DisallowedHost
DisallowedModelAdminLookup
DisallowedModelAdminToField
DisallowedRedirect
InvalidSessionKey
RequestDataTooBig
SuspiciousFileOperation
SuspiciousMultipartForm
SuspiciousSession
TooManyFieldsSent
如果
SuspiciousOperation
异常到达 WSGI 处理程序级别,它会在Error
级别记录并导致 HttpResponseBadRequest。 有关详细信息,请参阅 日志记录文档 。
ImproperlyConfigured
- exception ImproperlyConfigured
- ImproperlyConfigured 异常在 Django 以某种方式不正确配置时引发 - 例如,如果
settings.py
中的值不正确或无法解析。
FieldError
- exception FieldError
- 当模型字段出现问题时,会引发 FieldError 异常。 发生这种情况的原因有多种:
- 模型中的一个字段与抽象基类中的同名字段发生冲突
- 无限循环是由排序引起的
- 不能从过滤器参数中解析关键字
- 一个字段不能通过查询参数中的关键字来确定
- 不允许在指定字段上进行 join
- 字段名无效
- 查询包含无效的 order_by 参数
ValidationError
- exception ValidationError
- ValidationError 异常在数据表单或模型字段验证失败时引发。 有关验证的更多信息,请参阅 表单和字段验证 、 模型字段验证 和 验证器参考 。
NON_FIELD_ERRORS
- NON_FIELD_ERRORS
不属于表单或模型中特定字段的 ValidationError
被归类为 NON_FIELD_ERRORS
。 此常量用作字典中的键,否则将字段映射到它们各自的错误列表。
URL 解析器异常
URL 解析器异常在 django.urls
中定义。
Resolver404
- exception Resolver404
- 如果传递给
resolve()
的路径未映射到视图,则 Resolver404 异常由 resolve() 引发。 它是 django.http.Http404 的子类。
NoReverseMatch
- exception NoReverseMatch
- NoReverseMatch 异常由 django.urls 当无法根据提供的参数识别 URLconf 中的匹配 URL 时引发。
数据库异常
数据库异常可以从 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 异常
可以从 django.http
导入 Http 异常。
事务异常
事务异常在 django.db.transaction
中定义。
TransactionManagementError
- exception TransactionManagementError
- TransactionManagementError 是针对与数据库事务相关的任何和所有问题引发的。
测试框架异常
django.test
包提供的例外。
Python 异常
Django 也会在适当的时候引发内置的 Python 异常。 有关 bltin-exceptions 的更多信息,请参阅 Python 文档。