Python RESTful API中未处理的异常不会得到jsonify';预计起飞时间

Python RESTful API中未处理的异常不会得到jsonify';预计起飞时间,python,rest,exception,resources,flask,Python,Rest,Exception,Resources,Flask,我有以下代码-它有一个http处理函数(func1)和一个RESTful API(func2),可以通过URL/test1和/test2访问它们。我有一个异常处理函数(exception\u handler),它由app.errorhandler()修饰,以确保所有未处理的异常都被jsonid并作为响应返回 from flask import Flask, jsonify from flask.ext.restful import Resource, Api app = Flask(__nam

我有以下代码-它有一个http处理函数
(func1)
和一个RESTful API
(func2)
,可以通过URL
/test1
/test2
访问它们。我有一个异常处理函数
(exception\u handler)
,它由
app.errorhandler()
修饰,以确保所有未处理的异常都被jsonid并作为响应返回

from flask import Flask, jsonify
from flask.ext.restful import Resource, Api

app = Flask(__name__)
api = Api(app)

@app.errorhandler(Exception)
def exception_handler(e):
  return jsonify(reason=e.message), 500

@app.route("/test1", methods=["GET"])
def func1():
    raise Exception('Exception - test1')

class func2(Resource):
  def get(self):
    raise Exception('Exception - test2')

api.add_resource(func2, '/test2')

if __name__ == "__main__":
    app.run(debug=True)
现在,将未处理的异常转换为包含JSON的异常消息的HTTP响应对于正常的HTTP处理程序函数(即
func1
)来说效果很好,但是对于RESTful API(使用资源创建的)来说效果不好,即
func2

使用
func1
时,以下各项工作正常:

$ curl http://127.0.0.1:5000/test1 -X GET
{
  "reason": "Exception - test1"
}
使用
func2
我们得到的是
{“消息”:“内部服务器错误”,“状态”:500}
而不是
{“原因”:“异常-测试2”}


所以问题是为什么RESTful API中未处理的异常不使用
app.errorhandler
转换为JSON?或者还有其他的方法吗

flaskrestful有自己的错误处理程序,您从
/test2
看到的JSON输出是由扩展本身生成的


如果通过Flask的调用注册新的异常处理程序,则可以覆盖Flask Restful的异常。

这是因为
Flask Restful
monkeypatch默认值将具有其他端点的默认行为。

我认为FR中的错误处理过于有限。还有,米格尔,你能说得更具体一点吗?我们如何重写Flask Restful的异常处理,也就是说,为某个异常类型重新激活Flask的普通异常处理呢。与替换错误处理程序以便在Flask之前调用它们的方式相同,您可以插入在Flask Restul之前调用的自己的错误处理程序。在处理程序中,您可以决定何时将错误传递给Flask Restful以及何时自己处理它。如果您想调用Flask的原始处理程序,请在注册Flask Restful之前复制此处理程序。@sangeeth saravanaraj那么,您使用了什么样的解决方案?我现在不记得了,但您可能可以使用override error\u router/handle\u error:,或者向那里发送一些类似Api的处理程序。uu init\uuu(error=YOUR there)。请检查此案例的文档。
$ curl http://127.0.0.1:5000/test2 -X GET
{
    "message": "Internal Server Error",
    "status": 500
}