python异常处理

装饰器

def logger_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        line_no = getframeinfo(stack()[1][0]).lineno
        info = f'{func.__name__} method. line:{line_no}'
        logger.info('Running ' + info)
        result = None
        try:
            result = func(*args, **kwargs)
        except Exception as e:
            sign = '=' * 60 + '\n'
            logger.error(f'{sign}>>>异常时间:\t{datetime.now()}\n>>>异常函数:\t{func.__name__}\n>>>异常:\t{e}')
            logger.error(f'{sign}{traceback.format_exc()}{sign}')
        logger.info('Finished ' + info)
        return result

    return wrapper

Refer

import time
import functools


class DelayFunc:
    def __init__(self,  duration, func):
        self.duration = duration
        self.func = func

    def __call__(self, *args, **kwargs):
        print(f'Wait for {self.duration} seconds...')
        time.sleep(self.duration)
        return self.func(*args, **kwargs)

    def eager_call(self, *args, **kwargs):
        print('Call without delay')
        return self.func(*args, **kwargs)


def delay(duration):
    """装饰器:推迟某个函数的执行。同时提供 .eager_call 方法立即执行
    """
    # 此处为了避免定义额外函数,直接使用 functools.partial 帮助构造
    # DelayFunc 实例
    return functools.partial(DelayFunc, duration)

@delay(duration=2)
def add(a, b):
    return a + b


# 这次调用将会延迟 2 秒
add(1, 2)
# 这次调用将会立即执行
add.eager_call(1, 2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值