以下代码捕获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()
用于那些不适用于资源的人。
答案 0 :(得分:2)
我假设您只是将Flask的app
对象传递给Api
构造函数。
但是,您可以在构造函数中添加另一个名为catch_all_404s
的参数,该参数需要bool
。
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上的第一个答案之一。