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 - 00 当请求中缺少参数时,会引发错误请求。

  • HTTPForbidden - 服务器理解请求但拒绝授权。状态码为 403 禁止。

  • HTTPNotFound - 当服务器找不到目标资源的当前表示时,会引发 404 状态代码。它没有表明这种缺乏代表性是暂时的还是永久性的。

  • HTTPMethodNotAllowed - 405 不允许方法。目标资源不支持请求行中收到的方法。

  • HTTPLengthRequired - 当服务器拒绝接受没有定义的内容长度的请求时。411 需要长度。错误代码。

  • HTTPUnsupportedMediaType - 如果源服务器拒绝为请求提供服务,因为有效负载的格式不受目标资源上此方法的支持。等效状态代码是 415 不支持的媒体类型。

  • HTTPUnprocessableEntity - 如果服务器理解请求实体的内容类型并且请求实体的语法正确但无法处理所包含的指令,则引发的错误状态代码为 422 Unprocessable Entity。例如,如果 XML 请求正文包含格式正确但语义错误的 XML 指令。

  • HTTPTooManyRequests - 当用户在给定时间内发送过多请求(“速率限制”)时,会引发 429 Too Many Requests 状态代码。

  • HTTPInternalServerError - 一种非常常见的错误情况,导致 500 内部服务器错误。服务器遇到意外情况,无法满足请求。

  • HTTPNotImplemented - 501(未实现)状态代码表示服务器不支持完成请求所需的功能。当服务器无法识别请求方法并且无法支持任何资源时,这是适当的响应。

  • HTTPServiceUnavailable - 503 服务不可用意味着服务器当前由于临时过载或计划维护而无法处理请求。

  • MediaNotFoundError - 400 错误请求。当尝试解析空正文时,媒体处理程序会引发此异常。

  • MediaMalformedError - 400 错误请求。当尝试解析格式错误的正文时,媒体处理程序会引发此异常。

重定向

还有一组异常,当引发这些异常时,会触发对客户端的重定向响应。状态代码的类型为 3xx。这些异常由以下类表示,将请求处理作为HttpError的子类进行短路。

  • HTTPMovedPermanently - 301 永久移动。此状态代码指示目标资源已分配新的永久 URI。

  • HTTPFound - 302 Found 状态代码意味着目标资源暂时驻留在不同的 URI 下。

  • HTTPTemporaryRedirect - 此类引发 307(临时重定向)状态代码,这意味着目标资源临时驻留在不同的 URI 下,并且如果用户代理执行到该 URI 的自动重定向,则不得更改请求方法。

  • HTTPPermanentRedirect - 结果 ib 308 永久重定向,指示目标资源已分配新的永久 URI。