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 Bad Request。由于客户端错误,如请求语法不正确、请求信息框架无效等,服务器无法处理该请求。
-
HTTPInvalidHeader – 导致400坏请求,因为请求中的一个标头是无效的。
-
HTTPInvalidParam – 代表400坏请求。这个错误可能是指查询字符串、表单或文件中的一个无效参数,该参数与请求一起提交。
-
HTTPMissingParam – 当请求中缺少一个参数时,会引发00坏请求。
-
HTTPForbidden – 服务器理解该请求但拒绝授权。状态代码是403 Forbidden。
-
HTTPNotFound – 当服务器没有找到目标资源的当前表示,会引发404状态代码。它并不表明这种缺乏代表性是暂时的还是永久的。
-
HTTPMethodNotAllowed – 405方法不被允许。请求行中收到的方法不被目标资源所支持。
-
HTTPLengthRequired – 当服务器拒绝接受没有定义Content- Length的请求。411 长度要求。错误代码。
-
HTTPUnsupportedMediaType – 如果起源服务器拒绝为请求提供服务,因为有效载荷的格式不被目标资源的这种方法所支持。相等的状态代码是415不支持的媒体类型。
-
HTTPUnprocessableEntity – 如果服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是无法处理所包含的指令,那么提出的错误状态码是422 Unprocessable Entity。例如,如果一个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 – 导致ib 308永久重定向,表示目标资源已经被分配了一个新的永久URI。