烧瓶中@ app.errorhandler(Exception)未捕获无效路径

时间:2015-07-20 10:33:16

标签: python exception error-handling flask

以下代码捕获Not Found例外:

@app.errorhandler(404) 
def default_handler(e):
    return 'not-found', 404

问题在于,当我使用通用errorhandler时,它无法捕获404错误:

@app.errorhandler(Exception)
def default_handler(e):
    return 'server-error', 500

暂时我使用404的错误处理程序和其他错误的错误处理程序。为什么Not Found例外没有被第二个例子抓住?有没有办法使用一个errorhandler

修改
路由是flask-restful@app.route()的句柄。 flask-restful用于处理资源,@app.route()用于那些不适用于资源的人。

1 个答案:

答案 0 :(得分:2)

我假设您只是将Flask的app对象传递给Api构造函数。

但是,您可以在构造函数中添加另一个名为catch_all_404s的参数,该参数需要bool

From here

api = Api(app, catch_all_404s=True)

这应该让404错误路由到您的handle_error()方法。

即使这样做,如果它没有按照你的方式处理错误,你可以继承Api。 From here

class MyApi(Api):
    def handle_error(self, e):
        """ Overrides the handle_error() method of the Api and adds custom error handling
        :param e: error object
        """
        code = getattr(e, 'code', 500)  # Gets code or defaults to 500
        if code == 404:
            return self.make_response({
                'message': 'not-found',
                'code': 404
            }, 404)
    return super(MyApi, self).handle_error(e)  # handle others the default way

然后,您可以使用api对象而不是MyApi对象初始化Api对象。

像这样,

api = MyApi(app, catch_all_404s=True)

如果有效,请告诉我。这是我在Stack Overflow上的第一个答案之一。