重试装饰器实现,重试未定义 [英] retry decorator implementation, retries not defined

查看:56
本文介绍了重试装饰器实现,重试未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我实现了以下重试装饰器.

I have implemented the following retry decorator.

def retry(delay=10, retries=4):
    def retry_decorator(f):
        @wraps(f)
        def f_retry(*args, **kwargs):
            while retries > 1:
                try:
                    return f(*args, **kwargs)
                except Exception as e:
                    msg = "Exception: {}, Retrying in {} seconds...'.format(e, delay)"
                    print(msg)
                    time.sleep(delay)
                    retries -= 1
            return f(*args, **kwargs)

        return f_retry

    return retry_decorator

我得到未定义重试的错误.但是,在函数定义中提到了重试.我无法弄清楚这里出了什么问题.任何帮助将不胜感激.

I get the error that retries is not defined. However, retries is mentioned in the function definition. I am unable to figure out what went wrong here. Any help will be appreciated.

推荐答案

我通过收集字典中的重试和延迟变量,然后在函数内部使用变量来使其工作.

I made it work by collecting the variables retry and delay in a dictionary and then using that inside the function.

def retry(delay=10, retries=4):
    def retry_decorator(f):
        @wraps(f)
        def f_retry(*args, **kwargs):
            opt_dict = {'retries': retries, 'delay': delay}
            while opt_dict['retries'] > 1:
                try:
                    return f(*args, **kwargs)
                except Exception as e:
                    msg = "Exception: {}, Retrying in {} seconds...".format(e, delay)
                    print(msg)
                    time.sleep(opt_dict['delay'])
                    opt_dict['retries'] -= 1
            return f(*args, **kwargs)

        return f_retry

    return retry_decorator

这篇关于重试装饰器实现,重试未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆