gpt4 book ai didi

python - Flask 错误处理的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-02 00:06:54 27 4
gpt4 key购买 nike

为了在 flask webapp 中向客户端返回一个 400/500 响应,我看到了以下约定:

中止

import flask
def index(arg):
return flask.abort("Invalid request", 400)

元组

def index(arg):
return ("Invalid request", 400)

响应

import flask
def index(arg):
return flask.Response("Invalid request", 400)

有什么区别,什么时候首选?

相关问题

来自 Java/Spring,我习惯于定义一个带有与之关联的状态代码的自定义异常,然后每当应用程序抛出该异常时,带有该状态代码的响应会自动返回到用户(而不是必须显式地捕获它并返回如上所示的响应)。这在 flask 中可能吗?这是我的小包装尝试

from flask import Response

class FooException(Exception):
""" Binds optional status code and encapsulates returing Response when error is caught """
def __init__(self, *args, **kwargs):
code = kwargs.pop('code', 400)
Exception.__init__(self)
self.code = code

def as_http_error(self):
return Response(str(self), self.code)

然后使用

try:
something()
catch FooException as ex:
return ex.as_http_error()

最佳答案

最佳做法是创建自定义异常类,然后通过错误处理程序装饰器向 Flask 应用程序注册。您可以从业务逻辑中引发自定义异常,然后允许 Flask 错误处理程序处理任何自定义定义的异常。 (在 Spring 中也采用类似的方式。)

您可以像下面这样使用装饰器并注册您的自定义异常。

@app.errorhandler(FooException)
def handle_foo_exception(error):
response = jsonify(error.to_dict())
response.status_code = error.status_code
return response

您可以在这里阅读更多相关信息 Implementing API Exceptions

关于python - Flask 错误处理的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60324360/

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