# Django異常
DJango會拋出一些它自己的異常,以及Python的標準異常。
## Django核心異常
Django核心異常類定義在`django.core.exceptions`中。
### ObjectDoesNotExist
_exception _`ObjectDoesNotExist`[[source]](../_modules/django/core/exceptions.html#ObjectDoesNotExist)
[`DoesNotExist`](models/instances.html#django.db.models.Model.DoesNotExist "django.db.models.Model.DoesNotExist")異常的基類;對`ObjectDoesNotExist`的`try/except`會為所有模型捕獲到所有[`DoesNotExist`](models/instances.html#django.db.models.Model.DoesNotExist "django.db.models.Model.DoesNotExist") 異常。
[`ObjectDoesNotExist`](#django.core.exceptions.ObjectDoesNotExist "django.core.exceptions.ObjectDoesNotExist") 和 [`DoesNotExist`](models/instances.html#django.db.models.Model.DoesNotExist "django.db.models.Model.DoesNotExist")的更多信息請見 [`get()`](models/querysets.html#django.db.models.query.QuerySet.get "django.db.models.query.QuerySet.get")。
### FieldDoesNotExist
_exception _`FieldDoesNotExist`[[source]](../_modules/django/core/exceptions.html#FieldDoesNotExist)
當被請求的字段在模型或模型的父類中不存在時,`FieldDoesNotExist`異常由模型的 `_meta.get_field()`方法拋出。
Changed in Django 1.8:
之前的版本中,異常只在`django.db.models.fields`中定義,并不是公共API的一部分。
### MultipleObjectsReturned
_exception _`MultipleObjectsReturned`[[source]](../_modules/django/core/exceptions.html#MultipleObjectsReturned)
[`MultipleObjectsReturned`](#django.core.exceptions.MultipleObjectsReturned "django.core.exceptions.MultipleObjectsReturned")異常由查詢產生,當預期只有一個對象,但是有多個對象返回的時候。這個異常的一個基礎版本在[`django.core.exceptions`](#module-django.core.exceptions "django.core.exceptions: Django core exceptions")中提供。每個模型類都包含一個它的子類版本,它可以用于定義返回多個對象的特定的對象類型。
詳見[`get()`](models/querysets.html#django.db.models.query.QuerySet.get "django.db.models.query.QuerySet.get")。
### SuspiciousOperation
_exception _`SuspiciousOperation`[[source]](../_modules/django/core/exceptions.html#SuspiciousOperation)
當用戶進行的操作在安全方面可疑的時候,拋出[`SuspiciousOperation`](#django.core.exceptions.SuspiciousOperation "django.core.exceptions.SuspiciousOperation")異常,例如篡改會話cookie。`SuspiciousOperation`的子類包括:
* `DisallowedHost`
* `DisallowedModelAdminLookup`
* `DisallowedModelAdminToField`
* `DisallowedRedirect`
* `InvalidSessionKey`
* `SuspiciousFileOperation`
* `SuspiciousMultipartForm`
* `SuspiciousSession`
如果`SuspiciousOperation`異常到達了WSGI處理器層,它會在`Error`層記錄,并導致[`HttpResponseBadRequest`](request-response.html#django.http.HttpResponseBadRequest "django.http.HttpResponseBadRequest")異常。
詳見[_日志文檔_](../topics/logging.html)。
### PermissionDenied
_exception _`PermissionDenied`[[source]](../_modules/django/core/exceptions.html#PermissionDenied)
[`PermissionDenied`](#django.core.exceptions.PermissionDenied "django.core.exceptions.PermissionDenied")異常當用戶不被允許來執行請求的操作時產生。
### ViewDoesNotExist
_exception _`ViewDoesNotExist`[[source]](../_modules/django/core/exceptions.html#ViewDoesNotExist)
當所請求的視圖不存在時,[`ViewDoesNotExist`](#django.core.exceptions.ViewDoesNotExist "django.core.exceptions.ViewDoesNotExist") 異常由 [`django.core.urlresolvers`](urlresolvers.html#module-django.core.urlresolvers "django.core.urlresolvers")產生。
### MiddlewareNotUsed
_exception _`MiddlewareNotUsed`[[source]](../_modules/django/core/exceptions.html#MiddlewareNotUsed)
當中間件沒有在服務器配置中出現時,產生[`MiddlewareNotUsed`](#django.core.exceptions.MiddlewareNotUsed "django.core.exceptions.MiddlewareNotUsed")異常。
### ImproperlyConfigured
_exception _`ImproperlyConfigured`[[source]](../_modules/django/core/exceptions.html#ImproperlyConfigured)
DJango配置不當時產生[`ImproperlyConfigured`](#django.core.exceptions.ImproperlyConfigured "django.core.exceptions.ImproperlyConfigured")異常 -- 例如,`settings.py`中的值不正確或者不可解析。
### FieldError
_exception _`FieldError`[[source]](../_modules/django/core/exceptions.html#FieldError)
[`FieldError`](#django.core.exceptions.FieldError "django.core.exceptions.FieldError")異常當模型字段上出現問題時產生。它會由以下原因造成:
* 模型中的字段與抽象基類中相同名稱的字段沖突。
* 排序造成了一個死循環。
* 關鍵詞不能由過濾器參數解析。
* 字段不能由查詢參數中的關鍵詞決定。
* 連接(join)不能在指定對象上使用。
* 字段名稱不可用。
* 查詢包含了無效的 order_by參數。
### ValidationError
_exception _`ValidationError`[[source]](../_modules/django/core/exceptions.html#ValidationError)
當表單或模型字段驗證失敗時拋出[`ValidationError`](#django.core.exceptions.ValidationError "django.core.exceptions.ValidationError")異常。關于驗證的更多信息,請見[_表單字段驗證_](forms/validation.html), [_模型字段驗證_](models/instances.html#validating-objects) 和 [_驗證器參考_](validators.html)。
#### NON_FIELD_ERRORS
`NON_FIELD_ERRORS`
在表單或者模型中不屬于特定字段的`ValidationError` 被歸類為`NON_FIELD_ERRORS`。This constant is used as a key in dictionaries that otherwise map fields to their respective list of errors.
## URL解析器異常
URL解析器異常定義在`django.core.urlresolvers`中。
### Resolver404
_exception _`Resolver404`[[source]](../_modules/django/core/urlresolvers.html#Resolver404)
當向 `resolve()` 傳遞的路徑不映射到視圖的時候,[`Resolver404`](#django.core.urlresolvers.Resolver404 "django.core.urlresolvers.Resolver404")異常由[`django.core.urlresolvers.resolve()`](urlresolvers.html#django.core.urlresolvers.resolve "django.core.urlresolvers.resolve")產生。 它是 [`django.http.Http404`](../topics/http/views.html#django.http.Http404 "django.http.Http404")的子類。
### NoReverseMatch
_exception _`NoReverseMatch`[[source]](../_modules/django/core/urlresolvers.html#NoReverseMatch)
當你的URLconf中的一個匹配的URL不能基于提供的參數識別時,[`NoReverseMatch`](#django.core.urlresolvers.NoReverseMatch "django.core.urlresolvers.NoReverseMatch") 異常由 [`django.core.urlresolvers`](urlresolvers.html#module-django.core.urlresolvers "django.core.urlresolvers") 產生。
## Database Exceptions
數據庫異常由`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**](http://www.python.org/dev/peps/pep-0249),Python 數據庫 API 說明 v2.0。
按照 [**PEP 3134**](http://www.python.org/dev/peps/pep-3134),`__cause__`屬性會在原生(底層)的數據庫異常中設置,允許訪問所提供的任何附加信息。(注意這一屬性在Python 2和 3下面都可用,雖然 [**PEP 3134**](http://www.python.org/dev/peps/pep-3134)通常只用于Python 3。)
_exception _`models.``ProtectedError`
使用[`django.db.models.PROTECT`](models/fields.html#django.db.models.PROTECT "django.db.models.PROTECT")時,拋出異常來阻止所引用對象的刪除。[`models.`](#django.db.models.ProtectedError "django.db.models.ProtectedError")ProtectedError is a subclass of [`IntegrityError`](#django.db.IntegrityError "django.db.IntegrityError").
## Http異常
HTTP異常由`django.http`導入。
### UnreadablePostError
_exception _`UnreadablePostError`
用戶取消上傳時拋出[`UnreadablePostError`](#django.http.UnreadablePostError "django.http.UnreadablePostError")異常。
## 事務異常
事務異常定義在`django.db.transaction`中。
### TransactionManagementError
_exception _`TransactionManagementError`[[source]](../_modules/django/db/transaction.html#TransactionManagementError)
對于數據庫事務相關的任何問題,拋出[`TransactionManagementError`](#django.db.transaction.TransactionManagementError "django.db.transaction.TransactionManagementError")異常。
## 測試框架異常
由DJango `django.test` 包提供的異常。
### RedirectCycleError
_exception _`client.``RedirectCycleError`
New in Django 1.8\.
當測試客戶端檢測到重定向的循環或者過長的鏈時,拋出[`RedirectCycleError`](#django.test.client.RedirectCycleError "django.test.client.RedirectCycleError")異常。
## Python異常
Django在適當的時候也會拋出Python的內建異常。進一步的信息請見[_內建的異常_](https://docs.python.org/3/library/exceptions.html#bltin-exceptions "(in Python v3.4)")的Python文檔。
> 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[Overview](https://docs.djangoproject.com/en/1.8/ref/exceptions/)。
>
> 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。
>
> [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
- 新手入門
- 從零開始
- 概覽
- 安裝
- 教程
- 第1部分:模型
- 第2部分:管理站點
- 第3部分:視圖和模板
- 第4部分:表單和通用視圖
- 第5部分:測試
- 第6部分:靜態文件
- 高級教程
- 如何編寫可重用的應用
- 為Django編寫首個補丁
- 模型層
- 模型
- 模型語法
- 元選項
- 模型類
- 查詢集
- 執行查詢
- 查找表達式
- 模型的實例
- 實例方法
- 訪問關聯對象
- 遷移
- 模式編輯器
- 編寫遷移
- 高級
- 管理器
- 原始的SQL查詢
- 聚合
- 多數據庫
- 自定義查找
- 條件表達式
- 數據庫函數
- 其它
- 遺留的數據庫
- 提供初始數據
- 優化數據庫訪問
- 視圖層
- 基礎
- URL配置
- 視圖函數
- 快捷函數
- 裝飾器
- 參考
- 內建的視圖
- TemplateResponse 對象
- 文件上傳
- 概覽
- File 對象
- 儲存API
- 管理文件
- 自定義存儲
- 基于類的視圖
- 概覽
- 內建顯示視圖
- 內建編輯視圖
- API參考
- 分類索引
- 高級
- 生成 CSV
- 生成 PDF
- 中間件
- 概覽
- 內建的中間件類
- 模板層
- 基礎
- 面向設計師
- 語言概覽
- 人性化
- 面向程序員
- 表單
- 基礎
- 概覽
- 表單API
- 內建的Widget
- 高級
- 整合媒體
- 開發過程
- 設置
- 概覽
- 應用程序
- 異常
- 概覽
- django-admin 和 manage.py
- 添加自定義的命令
- 測試
- 介紹
- 部署
- 概述
- WSGI服務器
- 部署靜態文件
- 通過email追蹤代碼錯誤
- Admin
- 管理操作
- 管理文檔生成器
- 安全
- 安全概述
- 說明Django中的安全問題
- 點擊劫持保護
- 加密簽名
- 國際化和本地化
- 概述
- 本地化WEB UI格式化輸入
- “本地特色”
- 常見的網站應用工具
- 認證
- 概覽
- 使用認證系統
- 密碼管理
- 日志
- 分頁
- 會話
- 數據驗證
- 其它核心功能
- 按需內容處理
- 重定向
- 信號
- 系統檢查框架