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 Bad Request,因为请求中的标头之一无效。

  • HTTPInvalidParam − 代表 400 Bad Request。 此错误可能是指与请求一起提交的查询字符串、表单或文档中的无效参数。

  • HTTPMissingParam − 当请求中缺少参数时引发错误请求。

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

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

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

  • HTTPLengthRequired − 当服务器拒绝接受没有定义内容长度的请求时。

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

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

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

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

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

  • HTTPServiceUnavailable − 503 Service Unavailable 表示由于临时过载或定期维护,服务器当前无法处理请求。

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

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


重定向

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

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

  • HTTPFound − 302 Found 状态码表示目标资源暂时驻留在不同的 URI 下。

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

  • HTTPPermanentRedirect − 结果是 308 Permanent Redirect,说明目标资源已经被分配了一个新的永久URI。