gpt4 book ai didi

Flask 全局异常处理

转载 作者:行者123 更新时间:2023-12-03 16:05:24 24 4
gpt4 key购买 nike

如何使用 Flask 全局处理异常?我找到了使用以下方法来处理自定义数据库交互的方法:

try:
sess.add(cat2)
sess.commit()
except sqlalchemy.exc.IntegrityError, exc:
reason = exc.message
if reason.endswith('is not unique'):
print "%s already exists" % exc.params[0]
sess.rollback()

try-except 的问题是我必须在代码的每个方面都运行它。我可以找到更好的方法来为自定义代码做到这一点。我的问题更多地针对全局捕获和处理:

apimanager.create_api(
Model,
collection_name="models",
**base_writable_api_settings
)

我发现这个 apimanager 接受 validation_exceptions: [ValidationError] 但我没有找到使用它的例子。

我仍然希望使用一个简单的概念“如果这个错误:显示这个,如果另一个错误:显示其他东西”来影响所有数据库交互的更高层次的处理,它只在所有交互/异常上自动运行,而不包括我它在每个 apimanager 上(我想把它放在我的 base_writable_api_settings 中就可以了)。 (IntegrityErrorNameErrorDataErrorDatabaseError 等)

最佳答案

我倾向于在应用程序上设置错误处理程序,将异常格式化为 json 响应。然后您可以创建自定义异常,例如 UnauthorizedException...

class Unauthorized(Exception):
status_code = 401

@app.errorhandler(Exception)
def _(error):

trace = traceback.format_exc()
status_code = getattr(error, 'status_code', 400)
response_dict = dict(getattr(error, 'payload', None) or ())
response_dict['message'] = getattr(error, 'message', None)
response_dict['traceback'] = trace

response = jsonify(response_dict)
response.status_code = status_code
traceback.print_exc(file=sys.stdout)
return response

您还可以使用此模式处理特定 异常...

@app.errorhandler(ValidationError)
def handle_validation_error(error):
# Do something...

错误处理程序附加到应用程序,而不是 apimanager。你可能有类似的东西

app = Flask()
apimanager = ApiManager(app)
...

使用该应用程序对象将它放在某处。

关于Flask 全局异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662960/

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