Django 例外¶
Django 會引發一些它自己的例外,以及標準的 Python 例外。
Django 核心例外¶
Django 核心例外類別定義於 django.core.exceptions
。
AppRegistryNotReady
¶
ObjectDoesNotExist
¶
- exception ObjectDoesNotExist[原始碼]¶
Model.DoesNotExist
例外的基底類別。ObjectDoesNotExist
的try/except
將會捕獲所有模型的DoesNotExist
例外。請參閱
get()
。
EmptyResultSet
¶
FullResultSet
¶
FieldDoesNotExist
¶
MultipleObjectsReturned
¶
- exception MultipleObjectsReturned[原始碼]¶
Model.MultipleObjectsReturned
例外的基底類別。MultipleObjectsReturned
的try/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 程式碼可以保證這些類別的通用實作。
Django 資料庫例外的封裝行為與底層資料庫例外完全相同。有關詳細資訊,請參閱PEP 249,Python 資料庫 API 規格 v2.0。
根據 PEP 3134,__cause__
屬性會被設定為原始(底層)的資料庫例外,允許存取任何額外提供的資訊。
- 例外 models.ProtectedError¶
當使用 django.db.models.PROTECT
時,若要防止刪除被參照的物件,則會引發此例外。models.ProtectedError
是 IntegrityError
的子類別。
- 例外 models.RestrictedError¶
當使用 django.db.models.RESTRICT
時,若要防止刪除被參照的物件,則會引發此例外。models.RestrictedError
是 IntegrityError
的子類別。
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 文件。