Python Falcon 简明教程

Python Falcon - Error Handling

为了处理各种错误情况,上述状态代码可用于响应对象。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"
      )

Predefined Error Classes

Falcon 提供的一些预定义错误类如下−

  1. HTTPBadRequest − 400 Bad Request。由于客户端错误(例如格式错误的请求语法、无效的请求消息框架等),服务器无法处理请求。

  2. HTTPInvalidHeader − 导致 400 Bad Request,因为请求中的一个标题无效。

  3. HTTPInvalidParam − 表示 400 Bad Request。此错误可能指用请求提交的查询字符串、表单或文档中的无效参数。

  4. HTTPMissingParam − 当请求中缺少参数时,会引发 00 Bad Request。

  5. HTTPForbidden − 服务器理解请求,但拒绝授权该请求。状态代码为 403 Forbidden。

  6. HTTPNotFound − 当服务器没有为目标资源找到当前表示时,则会引发 404 状态代码。它不会表示该表示的缺乏是暂时的还是永久的。

  7. HTTPMethodNotAllowed − 405 Method Not Allowed。目标资源不支持请求行中接收的方法。

  8. HTTPLengthRequired − 当服务器不接受未定义内容长度的请求时。411 Length Required。错误代码。

  9. HTTPUnsupportedMediaType − 如果原始服务器由于有效负荷采用此方法在目标资源上不支持的格式而拒绝为请求提供服务。等效状态代码为 415 Unsupported Media Type。

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

  11. HTTPTooManyRequests − 当用户在指定时间内发送了太多请求(“比率限制”)时,会引发 429 Too Many Requests 状态代码。

  12. HTTPInternalServerError − 导致 500 Internal Server Error 的非常常见的错误情况。服务器遇到一种意外情况,阻止它满足请求。

  13. HTTPNotImplemented − 501 (Not Implemented) 状态代码表示服务器不支持满足请求所需的功能。这是在服务器不识别请求方法并且无法为任何资源支持它时适当的响应。

  14. HTTPServiceUnavailable − 503 服务不可用表示服务器由于临时过载或计划维护而当前无法处理请求。

  15. MediaNotFoundError − 400 请求错误。当尝试解析空主体时,媒体处理程序会抛出此异常。

  16. MediaMalformedError − 400 请求错误。当尝试解析格式错误的主体时,媒体处理程序会抛出此异常。

Redirection

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

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

  2. HTTPFound - 302 发现状态代码,这意味着目标资源临时驻留在其他 URI 下。

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

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