Exception 来自flask decorator的日志异常源

Exception 来自flask decorator的日志异常源,exception,flask,python-3.6,Exception,Flask,Python 3.6,我正在使用python装饰程序处理flask应用程序中的异常 decorators.py def exception(original_function=None, message='Some error occurred on our end.', app=None): def decorator(function): @functools.wraps(function) def wrapper_function(*args, **kwargs):

我正在使用python装饰程序处理flask应用程序中的异常

decorators.py

def exception(original_function=None, message='Some error occurred on our end.', app=None):
    def decorator(function):
        @functools.wraps(function)
        def wrapper_function(*args, **kwargs):
            try:
                return function(*args, **kwargs)
            except Exception as e:
                handler(app, e)
                return internal_error(message)

        return wrapper_function
@bp.route('/initialize/<string:uuid>/<string:method>', methods=['POST'])
@exception(app=current_app)
def initialize(uuid=None, method=None):
    if not uuid:
        return bad_request('No UUID')
处理程序
函数捕获异常详细信息并记录或显示它们

def handler(app, e='Exception'):
    exc_type, exc_obj, exc_tb = sys.exc_info()
    exc_type, filename, line_no = exc_type, exc_tb.tb_frame.f_code.co_filename, exc_tb.tb_lineno

    app.logger.error(f'\n+{"-" * 64}\n'
                     '| Exception details:\n'
                     f'| Message: {e}\n'
                     f'| Type:\t\t{exc_type}\n'
                     f'| File:\t\t{filename}\n'
                     f'| Line No:\t\t{line_no}\n'
                     f'+{"-" * 64}\n')
然后我在烧瓶路径中使用它,如下所示:

route.py

def exception(original_function=None, message='Some error occurred on our end.', app=None):
    def decorator(function):
        @functools.wraps(function)
        def wrapper_function(*args, **kwargs):
            try:
                return function(*args, **kwargs)
            except Exception as e:
                handler(app, e)
                return internal_error(message)

        return wrapper_function
@bp.route('/initialize/<string:uuid>/<string:method>', methods=['POST'])
@exception(app=current_app)
def initialize(uuid=None, method=None):
    if not uuid:
        return bad_request('No UUID')