Превышен предел глубины рекурсии при использовании декоратора
def decorator(n):
def inner_decorator(func):
def wrapper(b):
ppp(b)
print(f"hello {n}")
return wrapper
return inner_decorator
@decorator("beta")
def ppp(b):
print(f"hello {b}")
ppp("alpha")
При запуске данного кода возникает ошибка, а еще не используется функция декоратора inner_decorator, в которую передается в качестве аргумента функция ppp(). Подскажите пожалуйста что делать.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
def decorator(n):
def inner_decorator(func):
def wrapper(b):
ppp(b) # <-- ТУТ ПРОБЛЕМА
print(f"hello {n}")
return wrapper
return inner_decorator
Так вы рекурсивно вызываете задекорированную функцию ppp (а значит и сам декоратор) прямо внутри декоратора! Вызывайте исходную, не декорированную функцию, она передана внутреннему декоратору через параметр func:
def decorator(n):
def inner_decorator(func):
def wrapper(b):
func(b) # <-- ВОТ ТАК ПРАВИЛЬНО
print(f"hello {n}")
return wrapper
return inner_decorator
@decorator("beta")
def ppp(b):
print(f"hello {b}")
ppp('123')
Вывод:
hello 123
hello beta