有没有一种方法可以添加全局catch all错误处理程序,以便将响应更改为通用JSON响应?
我不能使用got_request_exception
信号,因为它不允许修改响应(http://flask.pocoo.org/docs/0.10/signals/)。
In contrast all signal handlers are executed in undefined order and do not modify any data.
我不想包装app.handle_exception
函数,因为这感觉像内部API。我想我想要的是:
@app.errorhandler()
def handle_global_error(e):
return "Global error"
注意errorhandler
不接受任何参数,这意味着它将捕获所有没有附加特定错误处理程序的异常/状态代码。我知道我可以使用errorhandler(500)
或errorhandler(Exception)
来捕获异常,但是如果我这样做abort(409)
例如,它仍然会返回一个HTML响应。
这与Flask 0.12兼容,是一个很好的解决方案(它允许以JSON或任何其他格式呈现错误)
https://github.com/pallets/flask/issues/671#issuecomment-12746738
您可以使用
@app.errorhandler(Exception)
:Demo(HTTPException检查确保保留状态代码):
输出:
如果还想覆盖Flask中的默认HTML异常(以便它们也返回JSON),请在
app.run
之前添加以下内容:对于较旧的Flask版本(<;=0.10.1,即当前的任何非git/master版本),向应用程序中添加以下代码以显式注册HTTP错误:
很不优雅,但是下面的操作可以将
HTTPException
的所有子类绑定到单个错误处理程序:相关问题 更多 >
编程相关推荐