Python Falcon - 錯誤處理



為了處理各種錯誤情況,可以使用以上狀態碼用於響應物件。Falcon 還提供了一套錯誤類。當出現相應的執行時錯誤情況時,可以引發它們的 物件。

這些錯誤類都繼承自HTTPError類作為它們的基類。錯誤物件引發方式如下例所示:

import falcon
class MyResource:
   def on_get(self, req, resp):
      # some Python code
      raise falcon.HTTPBadRequest(
         title="Value Out of Range",
         description="The value is not between permissible range"
      )

預定義的錯誤類

Falcon 提供的一些預定義錯誤類如下:

  • HTTPBadRequest − 400 錯誤請求。由於客戶端錯誤(例如格式錯誤的請求語法、無效的請求訊息框架等),伺服器無法處理請求。

  • HTTPInvalidHeader − 導致 400 錯誤請求,因為請求中的某個標頭無效。

  • HTTPInvalidParam − 表示 400 錯誤請求。此錯誤可能指提交給請求的查詢字串、表單或文件中的無效引數。

  • HTTPMissingParam − 請求中缺少引數時引發 400 錯誤請求。

  • HTTPForbidden − 伺服器理解了請求,但拒絕授權。狀態碼為 403 禁止。

  • HTTPNotFound − 當伺服器找不到目標資源的當前表示時,會引發 404 狀態碼。它並不表示這種表示的缺乏是暫時的還是永久的。

  • HTTPMethodNotAllowed − 405 方法不允許。請求行中收到的方法不受目標資源支援。

  • HTTPLengthRequired − 如果伺服器拒絕在沒有定義 Content-Length 的情況下接受請求。411 需要長度。錯誤程式碼。

  • HTTPUnsupportedMediaType − 如果源伺服器由於有效負載採用此方法在目標資源上不支援的格式而拒絕為請求提供服務。等效狀態碼為 415 不支援的媒體型別。

  • HTTPUnprocessableEntity − 如果伺服器理解請求實體的內容型別並且請求實體的語法正確,但無法處理包含的指令,則引發的錯誤狀態碼為 422 無法處理的實體。例如,如果 XML 請求正文包含格式良好但語義錯誤的 XML 指令。

  • HTTPTooManyRequests − 當用戶在給定時間內傳送了過多的請求(“速率限制”)時,會引發 429 過多請求狀態碼。

  • HTTPInternalServerError − 一個非常常見的錯誤情況,導致 500 內部伺服器錯誤。伺服器遇到意外情況,阻止其完成請求。

  • HTTPNotImplemented − 501(未實現)狀態碼錶示伺服器不支援完成請求所需的功能。當伺服器無法識別請求方法並且無法為任何資源支援它時,這是適當的響應。

  • HTTPServiceUnavailable − 503 服務不可用意味著伺服器當前由於臨時過載或計劃維護而無法處理請求。

  • MediaNotFoundError − 400 錯誤請求。當嘗試解析空正文時,媒體處理程式會引發此異常。

  • MediaMalformedError − 400 錯誤請求。當嘗試解析格式錯誤的正文時,媒體處理程式會引發此異常。

重定向

還有一些異常,當引發這些異常時,會觸發對客戶端的重定向響應。狀態碼為 3xx 型別。這些異常由以下類表示,作為HttpError的子類,會中斷請求處理。

  • HTTPMovedPermanently − 301 永久移動。此狀態碼錶示目標資源已被分配新的永久 URI。

  • HTTPFound − 302 已找到狀態碼,表示目標資源暫時位於不同的 URI 下。

  • HTTPTemporaryRedirect − 此類引發 307(臨時重定向)狀態碼,這意味著目標資源暫時位於不同的 URI 下,如果使用者代理對該 URI 執行自動重定向,則使用者代理一定不能更改請求方法。

  • HTTPPermanentRedirect − 導致 308 永久重定向,表示目標資源已被分配新的永久 URI。

廣告
© . All rights reserved.