在 python 中希望函数的执行不管任何异常的能捕获到,并且能出日志,很多的函数都需要,那么我们需要有一个修饰器,在需要安全执行的时候添加一个 @safe 就可以了。修饰器代码如下:
def safe(log_exc = True, log_err = False, raised = False, defval=None):
def _safe(func):
async def __safe(*args,
safe_log_exc=log_exc,
safe_log_err=log_err,
safe_raised=raised,
safe_defval=defval,
**kwargs):
try:
return await func(*args, **kwargs)
except Exception as e:
if safe_log_exc:
logger.exception(e)
if safe_log_err:
logger.error(e)
if safe_raised:
raise e
return safe_defval
return __safe
return _safe
使用案例如下:
@safe()
async def some_function():
pass
我们定义了默认的输出模式,可以通过给safe传参数来定制其行为。
当我们调用函数的时候需要他输出与默认不一样的异常日子的时候,
我们可以输入 safe_xxx 的参数来修改函数的异常输出行为。
网友评论