如何在一个地方处理多个端点的所有异常?

2024-09-29 19:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pynic框架来处理我的api端点,但我想这与Flask或Django的逻辑相同。在

我有几个端点,我想知道是否有任何方法可以在同一个地方处理所有的异常。在

例如:

class Pnorm(Handler):
    def post(self):

        logger = logging.getLogger(constants.loggerName)
        template_exception = "Exception {0} in class {1} ({2})."

        try:
            myJson = DoThings()
            return myJson

        except HTTP_400 as e:
            logger.critical(message)
            raise e
        except Exception as e:
            # unknown exception raise 500
            logger.critical(message)
            raise HTTP_500(message)

不管怎样,我是否可以让所有端点都以同样的方式处理异常,还是必须在每个点的末尾重复“异常块”? (我不是说只在同一个班上,而是通过这个项目。)

干杯, 朱利安

编辑时间: 我的主修课:

^{pr2}$

Tags: 框架apihttpmessageasexceptionlogger端点
2条回答

我认为正确的方法应该是装饰工,因为它完全符合需求。下面是代码w.r.t烧瓶的工件。在

需要注意的是,您需要将控件从decorator返回给处理程序。在

from functools import wraps
from flask import Flask, request

app = Flask(__name__)
def http_error_codes(method_name):
    @wraps(method_name)
    def handle_exceptions(*args):
        try:
            print("Inside the exceptions")
            return method_name(*args)
        except Exception as e:
            print("HAHAHAHA")
            raise e
    return handle_exceptions

def do_the_login():
    return "Testing is fun"

def show_the_login_form():
    raise ValueError('The day is too frabjous.')

@app.route('/login', methods=['GET', 'POST'])
@http_error_codes
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()


if __name__ == '__main__':
    app.run()

希望这有帮助

如果你想在一个地方处理所有的异常,你可以保留一个普通的异常块,如下所示。。在

try:
    #Code part may give error
except Exception:
   #If error what to do..

这里的Exception是一个通用类,它将处理所有异常,而不考虑错误。在

相关问题 更多 >

    热门问题