gpt4 book ai didi

python - 如何捕获 flask_restful 应用程序中引发的所有异常

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:48 24 4
gpt4 key购买 nike

我有一个简单的带有 Flask-Restful 的 restful 应用

from flask import Flask
from flask_restful import Api

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

api.add_resource(ContactList, "/contacts")


if __name__ == '__main__':
from object_SQLAlchemy import db
db.init_app(app)
app.run(port=5000)


class Contact(Resource):
parser = reqparse.RequestParser()
parser.add_argument(
'contact_no',
type=str,
required=True,
help="This field cannot be left blank"
)

@throttling.Throttle("10/m", strategy=2)
def get(self, name):
contact = Contacts.findbyname(name)
if contact:
return contact.json()
return {"message": "Contact does not exist."}, 404

'get' 方法装饰有我的节流实现(https://github.com/scgbckbone/RESTAPI/blob/master/resources/utils/throttling.py)。重要的是节流装饰器在某些情况下会引发异常——最重要的是当达到限制时。我希望能够捕获该异常并返回一些合理的 json 消息。

但以下均无效:

from ..app_alchemy import api, app


@api.errorhandler(Exception)
def handle_error(e):
return {"error": str(e)}


@app.errorhandler(500)
def handle_error_app(e):
return {"error": str(e.args[0])}


@app.handle_exception(Exception)
def handle_it_app(e):
return {"error": str(e.args[0])}


@api.handle_exception(Exception)
def handle_it(e):
return {"error": str(e.args[0])}

我仍然收到默认消息

{"message": "Internal Server Error"}

我是否正确使用了错误处理程序,还是与装饰器的使用有关?我真的不知道。

最佳答案

有一个 Flask-Restful built-in tool为了处理异常,您可以将异常类和响应字段的字典传递给 Api 构造函数:

api = Api(app, errors={
'Exception': {
'status': 400,
'message': 'bad_request',
'some_description': 'Something wrong with request'
}
})

Status 默认为 500,所有其他字段只是转换为 JSON 并作为响应发送。

有一个主要缺点:您不能使用异常文本作为错误消息。有一个 open issue

关于python - 如何捕获 flask_restful 应用程序中引发的所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46873625/

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