gpt4 book ai didi

python - RESTful API 中未处理的异常没有得到 jsonify'ed

转载 作者:太空狗 更新时间:2023-10-30 02:20:59 25 4
gpt4 key购买 nike

我有以下代码 - 它有一个 http 处理函数 (func1) 和一个 RESTful API (func2) 并且它们可以通过 URLs /test1 访问/test2。我有一个异常处理函数 (exception_handler),它由 app.errorhandler() 修饰,以确保所有未处理的异常都经过 jsonify 处理并作为响应发回。

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(使用 Resource 创建)即 func2

对于 func1,下面的代码可以正常工作:

$ curl http://127.0.0.1:5000/test1 -X GET
{
"reason": "Exception - test1"
}

使用 func2 我们得到一个 {"message": "Internal Server Error", "status": 500} 而不是 {"reason": “异常 - 测试 2”

$ curl http://127.0.0.1:5000/test2 -X GET
{
"message": "Internal Server Error",
"status": 500
}

所以问题是为什么RESTful API中未处理的异常没有使用app.errorhandler转换成JSON?还是有其他方法可以做到这一点?

最佳答案

这是因为 Flask-Restful monkeypatch 默认 Flask.handle_user_exception这将有 specific logic for Flask-Restful endpoints以及其他端点的默认行为。

关于python - RESTful API 中未处理的异常没有得到 jsonify'ed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19187036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com