Python自定义重试装饰器

Python自定义重试装饰器

代码如下:

import random
import time
from functools import wraps


def fail_retry(try_times, time_delay):
    def decorator(func):
        @wraps(func)
        def wrapper():
            n = 1
            current_result = func()
            while not current_result:
                print(f"开始第{n}次重试....")
                time.sleep(time_delay)
                retry_result = func()       
                if retry_result:
                    current_result = retry_result
                    break
                n += 1
                if n > try_times:
                    break
            return current_result
        return wrapper
    return decorator


@fail_retry(try_times=5, time_delay=1)
def test():
    try:
        return 10 / random.randint(0, 1)
    except Exception as e:
        print(f"执行失败,当前执行错误码为:{e}")
        return None


for i in range(1, 10):
    print(f"{'='*10}开始第{i}次测试{'='*10}")
    print(f"测试成功的的结果是:{test()}")

执行结果如下:


==========开始第1次测试==========
执行失败,当前执行错误码为:division by zero
开始第1次重试....
测试成功的的结果是:10.0
==========开始第2次测试==========
执行失败,当前执行错误码为:division by zero
开始第1次重试....
测试成功的的结果是:10.0
==========开始第3次测试==========
执行失败,当前执行错误码为:division by zero
开始第1次重试....
测试成功的的结果是:10.0
==========开始第4次测试==========
测试成功的的结果是:10.0
==========开始第5次测试==========
测试成功的的结果是:10.0
==========开始第6次测试==========
执行失败,当前执行错误码为:division by zero
开始第1次重试....
执行失败,当前执行错误码为:division by zero
开始第2次重试....
执行失败,当前执行错误码为:division by zero
开始第3次重试....
测试成功的的结果是:10.0
==========开始第7次测试==========
执行失败,当前执行错误码为:division by zero
开始第1次重试....
执行失败,当前执行错误码为:division by zero
开始第2次重试....
执行失败,当前执行错误码为:division by zero
开始第3次重试....
测试成功的的结果是:10.0
==========开始第8次测试==========
测试成功的的结果是:10.0
==========开始第9次测试==========
测试成功的的结果是:10.0

Process finished with exit code 0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值