Django 会引发一些自己的异常以及标准的 Python 异常。
Django 核心异常类定义在 django.core.exceptions 中。
AppRegistryNotReady¶ObjectDoesNotExist¶Model.DoesNotExist 异常的基类。一个对 ObjectDoesNotExist 的 try/except 将捕获对所有模型的 DoesNotExist 异常。
See get().
ObjectNotUpdated¶The base class for Model.NotUpdated exceptions. A try/except for
ObjectNotUpdated will catch
NotUpdated exceptions for all models.
See save().
EmptyResultSet¶FullResultSet¶FieldDoesNotExist¶MultipleObjectsReturned¶Model.MultipleObjectsReturned 异常的基类。一个对 MultipleObjectsReturned 的 try/except 将捕获对所有模型的 MultipleObjectsReturned 异常。
See get().
SuspiciousOperation¶SuspiciousOperation 异常是在用户进行了从安全角度看应该被认为是可疑的操作时产生的,例如篡改会话 cookie。SuspiciousOperation 的子类包括:
DisallowedHost
DisallowedModelAdminLookup
DisallowedModelAdminToField
DisallowedRedirect
InvalidSessionKey
RequestDataTooBig
SuspiciousFileOperation
SuspiciousMultipartForm
SuspiciousSession
TooManyFieldsSent
TooManyFilesSent
如果一个 SuspiciousOperation 异常达到 ASGI/WSGI 处理程序级别,它将被记录在 Error 级别,并导致一个 HttpResponseBadRequest。更多信息请参见 :doc:`日志文档 `。
PermissionDenied¶PermissionDenied 异常是在用户没有权限执行所请求的操作时发生的。
ViewDoesNotExist¶当请求的视图不存在时, ViewDoesNotExist 异常由 django.urls 引发。
MiddlewareNotUsed¶当服务器配置中没有使用中间件时,会引发 MiddlewareNotUsed 异常。
ImproperlyConfigured¶ImproperlyConfigured 异常是在 Django 配置不当的情况下产生的,例如,settings.py 中的一个值不正确或无法解析。
FieldError¶FieldError 异常是在模型字段出现问题时引发的。发生这种情况有几种原因:
模型中的一个字段与抽象基类中的同名字段发生冲突
无限循环是由排序引起的
不能从过滤器参数中解析关键字
一个字段不能通过查询参数中的关键字来确定
不允许在指定字段上进行 join
字段名无效
查询包含无效的 order_by 参数
ValidationError¶当数据未能通过表单或模型字段验证时,会引发 ValidationError 异常。关于验证的更多信息,请参见 表单和字段验证、 模型字段验证 和 验证器参考。
NON_FIELD_ERRORS¶ValidationError 不属于表格或模型中某一特定字段的错误被归类为 NON_FIELD_ERRORS。这个常量在字典中被用作键,否则就会将字段映射到它们各自的错误列表中。
BadRequest¶BadRequest 异常是在请求由于客户端错误而不能被处理时引发的。如果一个 BadRequest 异常到达 ASGI/WSGI 处理程序级别,它会导致一个 HttpResponseBadRequest。
RequestAborted¶RequestAborted 异常是在处理程序正在读入的 HTTP 主体被中途切断和客户端连接关闭时,或者在客户端没有发送数据和遇到服务器关闭连接的超时时引发的。
它是 HTTP 处理模块内部的,你不太可能在其他地方看到它。如果你正在修改 HTTP 处理代码,你应该在遇到一个中止的请求时提出这个问题,以确保 socket 被干净地关闭。
SynchronousOnlyOperation¶当只有在同步 Python 代码中才允许的代码被从异步上下文(一个有正在运行的异步事件循环的线程)中调用时,会引发 SynchronousOnlyOperation 异常。Django 的这些部分一般都严重依赖线程安全来运行,在协程共享同一个线程的情况下无法正常工作。
如果你想从一个异步线程中调用只用于同步的代码,那么就创建一个同步线程并在该线程中调用它。你可以通过 asgiref.sync.sync_to_async() 来实现。
URL 解析器异常定义在 django.urls 中。
Resolver404¶The Resolver404 exception is raised by
resolve() if the path passed to resolve() doesn't
map to a view. It's a subclass of django.http.Http404.
NoReverseMatch¶NoReverseMatch 异常是由 django.urls 引发的,当你的 URLconf 中不能根据提供的参数识别出一个匹配的 URL 时会引发。
数据库异常可以从 django.db 导入。
Django 封装了标准的数据库异常,这样你的 Django 代码就可以保证这些类的通用实现。
数据库异常的 Django 包装器的行为与底层数据库异常完全相同。更多信息请参见 PEP 249,Python 数据库 API 规范 v2.0。
根据 PEP 3134,__cause__ 属性与原始(基础)数据库异常一起设置,允许访问提供的任何附加信息。
当使用 django.db.models.PROTECT 时,为了防止删除引用对象而引发的 models.ProtectedError 是 IntegrityError 的子类。
当使用 django.db.models.RESTRICT 时,为了防止删除引用对象而引发的 models.RestrictedError 是 IntegrityError 的子类。
HTTP 异常可以从 django.http 导入。
UnreadablePostError¶UnreadablePostError 在用户取消上传时引发。
会话异常在 django.contrib.session.exceptions 中定义。
SessionInterrupted¶SessionInterrupted 是当一个会话在一个并发请求中被破坏时引发的。它是 BadRequest 的一个子类。
事务异常在 django.db.transaction 中定义。
TransactionManagementError¶TransactionManagementError 是针对与数据库事务有关的任何和所有问题提出的。
django.test 包提供的异常。
RedirectCycleError¶RedirectCycleError 当测试客户端检测到一个循环或过长的重定向链时,就会引发。
Django 也会在适当的时候引发内置的 Python 异常。更多关于 Built-in Exceptions 的信息请参见 Python 文档。
12月 22, 2025