Django 异常 — Django 文档
Django 异常
Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常
Django 核心异常类在 django.core.exceptions
中定义。
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
异常到达 ASGI/WSGI 处理程序级别,它会在Error
级别记录并导致 HttpResponseBadRequest。 有关详细信息,请参阅 日志记录文档 。
ImproperlyConfigured
- exception ImproperlyConfigured
- ImproperlyConfigured 异常在 Django 以某种方式不正确配置时引发 - 例如,如果
settings.py
中的值不正确或无法解析。
FieldError
- exception FieldError
- 当模型字段出现问题时,会引发 FieldError 异常。 发生这种情况的原因有多种:
- 模型中的字段与抽象基类中的同名字段发生冲突
- 无限循环是由排序引起的
- 无法从过滤器参数中解析关键字
- 无法从查询参数中的关键字确定字段
- 指定字段不允许连接
- 字段名称无效
- 查询包含无效的 order_by 参数
ValidationError
- exception ValidationError
- ValidationError 异常在数据表单或模型字段验证失败时引发。 有关验证的更多信息,请参阅 表单和字段验证 、 模型字段验证 和 验证器参考 。
NON_FIELD_ERRORS
- NON_FIELD_ERRORS
不属于表单或模型中特定字段的 ValidationError
被归类为 NON_FIELD_ERRORS
。 此常量用作字典中的键,否则将字段映射到它们各自的错误列表。
BadRequest
- exception BadRequest
3.2 版中的新功能。
当由于客户端错误而无法处理请求时,会引发 BadRequest 异常。 如果
BadRequest
异常到达 ASGI/WSGI 处理程序级别,则会导致 HttpResponseBadRequest。
RequestAborted
- exception RequestAborted
RequestAborted 异常在处理程序读入的 HTTP 主体在中途被切断并且客户端连接关闭时引发,或者当客户端不发送数据并达到服务器关闭连接的超时时。
它在 HTTP 处理程序模块内部,您不太可能在其他地方看到它。 如果您正在修改 HTTP 处理代码,您应该在遇到中止请求时引发此问题,以确保套接字完全关闭。
SynchronousOnlyOperation
- exception SynchronousOnlyOperation
SynchronousOnlyOperation 异常在从异步上下文(具有运行异步事件循环的线程)调用仅允许在同步 Python 代码中使用的代码时引发。 Django 的这些部分通常严重依赖线程安全来运行,并且在共享同一线程的协程下无法正常工作。
如果您尝试从异步线程调用仅同步的代码,则创建一个同步线程并在其中调用它。 您可以使用 asgiref.sync.sync_to_async() 来完成此操作。
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 的子类。
- exception models.RestrictedError
引发以防止在使用 django.db.models.RESTRICT 时删除引用的对象。 models.RestrictedError 是 IntegrityError 的子类。
Http 异常
可以从 django.http
导入 Http 异常。
会话异常
会话异常在 django.contrib.sessions.exceptions
中定义。
SessionInterrupted
- exception SessionInterrupted
3.2 版中的新功能。
SessionInterrupted 在并发请求中销毁会话时引发。 它是 BadRequest 的子类。
交易异常
事务异常在 django.db.transaction
中定义。
TransactionManagementError
- exception TransactionManagementError
- TransactionManagementError 是针对与数据库事务相关的任何和所有问题引发的。
测试框架异常
django.test
包提供的例外。
Python 异常
Django 也会在适当的时候引发内置的 Python 异常。 有关 bltin-exceptions 的更多信息,请参阅 Python 文档。