我正在使用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
handler
函数捕获异常详细信息并记录或显示它们。
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
@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')
现在,该处理程序确实可以工作,但是它记录了该异常源自return function(*args, **kwargs)
行上的decorators.py。 我该如何记录实际的文件并记录异常的起源?
这是日志的输出。
+----------------------------------------------------------------
| Exception details:
| Message: Required PAYPAL_CLIENT_ID and PAYPAL_CLIENT_SECRET.
| Type: <class 'paypalrestsdk.exceptions.MissingConfig'>
| File: /app/decorators.py
| Line No: 16
+----------------------------------------------------------------