一个修饰器 safe

2021-10-02  本文已影响0人  Lupino

在 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 的参数来修改函数的异常输出行为。

上一篇 下一篇

猜你喜欢

热点阅读