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。

广告