python使用装饰器在函数出错时自动重复运行n次

业务背景

编写爬虫、连接远程数据库等操作常常因为网络问题失败,需要我们重新尝试。为了避免对整个程序的影响,我们可以使用装饰器让特定模块再出错时自动重新运行。

代码

import functools

def retry_on_error(max_attempts=2):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            attempts = 0
            while attempts < max_attempts:
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    attempts += 1
                    print(f"函数 {func.__name__} 运行出错:{e}. 正在尝试第 {attempts} 次重新运行...")
            else:
                raise RuntimeError(f"函数 {func.__name__} 已达到最大尝试次数 {max_attempts},仍无法成功运行")

        return wrapper
    return decorator

# 使用装饰器来修饰函数
@retry_on_error(max_attempts=3)
def potentially_unstable_function():
    import random
    if random.random() < 0.5:
        raise ValueError("随机错误")
    els
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值