Flask:自定义错误处理程序无法捕获所有异常

时间:2016-12-06 11:56:29

标签: python rest flask

我在我的应用程序中使用以下错误处理程序:

def make_json_error(ex):
    status_code = ex.code if isinstance(ex, HTTPException) else 500
    description = str(ex.description) if isinstance(ex, HTTPException) else 'internal server error'
    message = {'error': {'message': '{}: {}'.format(str(status_code), description)}}

    response = jsonify(message)
    response.status_code = status_code

    return response

然后在创建Flask应用程序时使用:

for code in werkzeug.exceptions.default_exceptions:
    app.errorhandler(code)(make_json_error)

奇怪的是,它不会为某些无效请求返回JSON格式的错误:

$ curl 'http://127.0.0.1:5000/api/tickets?id=a' -H "Content-Type: application/json"
{
  "error": {
    "message": "400: Invalid id parameter values"
  }
}

$ curl 'http://127.0.0.1:5000/api/tickets?id=a 1' -H "Content-Type: application/json"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: 400</p>
        <p>Message: Bad request syntax ('GET /api/tickets?id=a 1 HTTP/1.1').</p>
        <p>Error code explanation: 400 - Bad request syntax or unsupported method.</p>
    </body>
</html>

请注意第二个命令中查询字符串中的额外空格。任何想法为什么这也不作为常规400错误处理,与第一个相同?据我所知,第二个URL甚至没有通过/tickets视图函数进行路由,因此我假设空格在Flask中以某种方式特别解释。

0 个答案:

没有答案