Внутренняя функция декоратора не может получить доступ к переменной декоратора - PullRequest
1 голос
/ 16 января 2020

У меня есть следующий код

from time import sleep
def dec(my_func,*args,**kwargs):
     counter = 0
     def temp_func(*args, **kwargs):
         try:
             my_func(*args,**kwargs)
             return True
         except:
             if counter < 5:
                 counter+=1
                 temp_func(*args, **kwargs)
                 sleep(10)
             else:
                 return False
     return temp_func
@dec
def my_func(a,b):
    return a/b

print(my_func(1,2))
print(my_func(1,0))

Выдает следующую ошибку:

---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-11-f73a2a9ab2e3> in <module>()
----> 1 my_func(1,0)

<ipython-input-8-bce781eec53d> in temp_func(*args, **kwargs)
      7             return True
      8         except:
----> 9             if counter < 5:
     10                 counter+=1
     11                 temp_func(*args, **kwargs)

UnboundLocalError: local variable 'counter' referenced before assignment

Почему внутренняя функция не может получить доступ к переменной декоратора здесь? Обычно внутренняя функция имеет доступ к переменной декоратора. Даже если я устанавливаю переменную счетчика в глобальном контексте, я получаю ту же ошибку. Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 16 января 2020

Я не совсем уверен, почему возникает эта ошибка, но если вы переместите counter на temp_func вместо dec, то это сработает. Это должно иметь тот же эффект.

...