Django 例外

Django 會引發一些它自己的例外,以及標準的 Python 例外。

Django 核心例外

Django 核心例外類別定義於 django.core.exceptions

AppRegistryNotReady

exception AppRegistryNotReady[原始碼]

當嘗試在 應用程式載入程序(初始化 ORM)完成之前使用模型時,會引發此例外。

ObjectDoesNotExist

exception ObjectDoesNotExist[原始碼]

Model.DoesNotExist 例外的基底類別。ObjectDoesNotExisttry/except 將會捕獲所有模型的 DoesNotExist 例外。

請參閱 get()

EmptyResultSet

exception EmptyResultSet[原始碼]

如果查詢不會傳回任何結果,則在查詢產生期間可能會引發 EmptyResultSet。大多數 Django 專案不會遇到此例外,但它對於實作自訂查詢和表達式可能很有用。

FullResultSet

exception FullResultSet[原始碼]

如果查詢會符合所有內容,則在查詢產生期間可能會引發 FullResultSet。大多數 Django 專案不會遇到此例外,但它對於實作自訂查詢和表達式可能很有用。

FieldDoesNotExist

exception FieldDoesNotExist[原始碼]

當要求的欄位不存在於模型或模型的父系時,模型的 _meta.get_field() 方法會引發 FieldDoesNotExist 例外。

MultipleObjectsReturned

exception MultipleObjectsReturned[原始碼]

Model.MultipleObjectsReturned 例外的基底類別。MultipleObjectsReturnedtry/except 將會捕獲所有模型的 MultipleObjectsReturned 例外。

請參閱 get()

SuspiciousOperation

exception SuspiciousOperation[原始碼]

當使用者執行從安全性角度來看應該被視為可疑的操作時(例如竄改工作階段 cookie),會引發 SuspiciousOperation 例外。SuspiciousOperation 的子類別包括

  • DisallowedHost

  • DisallowedModelAdminLookup

  • DisallowedModelAdminToField

  • DisallowedRedirect

  • InvalidSessionKey

  • RequestDataTooBig

  • SuspiciousFileOperation

  • SuspiciousMultipartForm

  • SuspiciousSession

  • TooManyFieldsSent

  • TooManyFilesSent

如果 SuspiciousOperation 例外到達 ASGI/WSGI 處理常式層級,則會在 Error 層級記錄,並導致 HttpResponseBadRequest。請參閱 記錄文件 以取得更多資訊。

PermissionDenied

exception PermissionDenied[原始碼]

當使用者沒有執行所要求動作的權限時,會引發 PermissionDenied 例外。

ViewDoesNotExist

exception ViewDoesNotExist[原始碼]

當要求的視圖不存在時,django.urls 會引發 ViewDoesNotExist 例外。

MiddlewareNotUsed

exception MiddlewareNotUsed[原始碼]

當伺服器設定中未使用中介軟體時,會引發 MiddlewareNotUsed 例外。

ImproperlyConfigured

exception ImproperlyConfigured[原始碼]

當 Django 的組態設定不正確時,會引發 ImproperlyConfigured 例外,例如,settings.py 中的值不正確或無法解析。

FieldError

例外 FieldError[原始碼]

當模型欄位出現問題時,會引發 FieldError 例外。這可能由於以下幾個原因:

  • 模型中的欄位與抽象基底類別中具有相同名稱的欄位衝突

  • 排序導致無限迴圈

  • 無法從篩選參數中解析關鍵字

  • 無法從查詢參數中的關鍵字判斷欄位

  • 不允許在指定的欄位上進行聯結

  • 欄位名稱無效

  • 查詢包含無效的 order_by 參數

ValidationError

例外 ValidationError[原始碼]

當資料未能通過表單或模型欄位驗證時,會引發 ValidationError 例外。有關驗證的詳細資訊,請參閱表單和欄位驗證模型欄位驗證驗證器參考

NON_FIELD_ERRORS

NON_FIELD_ERRORS

不屬於表單或模型中特定欄位的 ValidationError 會被歸類為 NON_FIELD_ERRORS。此常數用作字典中的鍵,該字典將欄位對應到各自的錯誤列表。

BadRequest

例外 BadRequest[原始碼]

當由於客戶端錯誤而無法處理請求時,會引發 BadRequest 例外。如果 BadRequest 例外到達 ASGI/WSGI 處理器層級,則會導致 HttpResponseBadRequest

RequestAborted

例外 RequestAborted[原始碼]

當處理器正在讀取的 HTTP 主體在中途被切斷且客戶端連線關閉時,或者當客戶端未傳送資料並達到伺服器關閉連線的逾時時間時,會引發 RequestAborted 例外。

它屬於 HTTP 處理器模組的內部錯誤,您不太可能在其他地方看到它。如果您正在修改 HTTP 處理程式碼,當您遇到中止的請求時,應該引發此例外以確保 Socket 清理關閉。

SynchronousOnlyOperation

例外 SynchronousOnlyOperation[原始碼]

當僅允許在同步 Python 程式碼中執行的程式碼從非同步環境(具有執行中的非同步事件迴圈的執行緒)呼叫時,會引發 SynchronousOnlyOperation 例外。Django 的這些部分通常嚴重依賴執行緒安全才能運作,並且在共用相同執行緒的協程下無法正確運作。

如果您嘗試從非同步執行緒呼叫僅限同步的程式碼,請建立一個同步執行緒並在其中呼叫它。您可以使用 asgiref.sync.sync_to_async() 來完成此操作。

URL 解析器例外

URL 解析器例外在 django.urls 中定義。

Resolver404

例外 Resolver404[原始碼]

如果傳遞給 resolve() 的路徑未對應到檢視,則 resolve() 會引發 Resolver404 例外。它是 django.http.Http404 的子類別。

NoReverseMatch

例外 NoReverseMatch[原始碼]

當無法根據提供的參數識別 URLconf 中符合的 URL 時,django.urls 會引發 NoReverseMatch 例外。

資料庫例外

資料庫例外可以從 django.db 匯入。

Django 會封裝標準資料庫例外,以便您的 Django 程式碼可以保證這些類別的通用實作。

例外 Error[原始碼]
例外 InterfaceError[原始碼]
例外 DatabaseError[原始碼]
例外 DataError[原始碼]
例外 OperationalError[原始碼]
例外 IntegrityError[原始碼]
例外 InternalError[原始碼]
例外 ProgrammingError[原始碼]
例外 NotSupportedError[原始碼]

Django 資料庫例外的封裝行為與底層資料庫例外完全相同。有關詳細資訊,請參閱PEP 249,Python 資料庫 API 規格 v2.0。

根據 PEP 3134__cause__ 屬性會被設定為原始(底層)的資料庫例外,允許存取任何額外提供的資訊。

例外 models.ProtectedError

當使用 django.db.models.PROTECT 時,若要防止刪除被參照的物件,則會引發此例外。models.ProtectedErrorIntegrityError 的子類別。

例外 models.RestrictedError

當使用 django.db.models.RESTRICT 時,若要防止刪除被參照的物件,則會引發此例外。models.RestrictedErrorIntegrityError 的子類別。

HTTP 例外

HTTP 例外可以從 django.http 匯入。

UnreadablePostError

例外 UnreadablePostError[原始碼]

當使用者取消上傳時,會引發 UnreadablePostError

Sessions 例外

Sessions 例外定義在 django.contrib.sessions.exceptions 中。

SessionInterrupted

例外 SessionInterrupted[原始碼]

當 session 在並行請求中被銷毀時,會引發 SessionInterrupted。它是 BadRequest 的子類別。

交易例外

交易例外定義在 django.db.transaction 中。

TransactionManagementError

例外 TransactionManagementError[原始碼]

對於任何與資料庫交易相關的問題,都會引發 TransactionManagementError

測試框架例外

django.test 套件提供的例外。

RedirectCycleError

例外 client.RedirectCycleError

當測試客戶端偵測到迴圈或過長的重新導向鏈時,會引發 RedirectCycleError

Python 例外

Django 也會在適當的時候引發內建的 Python 例外。有關 內建例外 的更多資訊,請參閱 Python 文件。

返回頂部