повторная реализация декоратора, повторные попытки не определены - PullRequest
0 голосов
/ 16 октября 2018

Я реализовал следующий декоратор повторных попыток.

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

Я получаю сообщение об ошибке, что повторные попытки не определены.Тем не менее, повторные попытки упоминаются в определении функции.Я не могу понять, что здесь пошло не так.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 октября 2018

Я заставил его работать, собирая переменные retry и delay в словаре, а затем используя это внутри функции.

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
...