Как узнать текущую глубину рекурсии в python?

Рейтинг: 5Ответов: 1Опубликовано: 22.02.2023

Нагуглил, что вывести текущий лимит (1000 по умолчанию) и изменить его можно с помощью модуля sys. Но как вывести именно текущую глубину погружения в рекурсию в определенный момент времени? В sys такого не нашел. Например, что нужно добавить в func_2 в таком коде, что бы печаталась глубина рекурсии при каждом входе в эту функцию?

def func_1():
    func_2()

def func_2():
    func_1()

Ответы

▲ 2Принят

Ответ дали в комментариях, так что отвечу на собственный вопрос, может кому пригодится. За ответ спасибо Danis.

len(inspect.getouterframes(inspect.currentframe())) позволяет вывести на печать текущую глубину рекурсии.

Столкнулся с проблемой рекурсии в pygame - у меня при начале новой игры из меню (без перезапуска программы) выполняется функция mainloop(), в которой содержится главный цикл игры. И каждый раз глубина рекурсии увеличивается примерно на 10. Примерно сотый перезапуск игры уронит её, так что проблема существенная. Тем более игры короткие, по минуте на попытку. В реальном проекте, наверное, за такое железной линейкой по пальцам бить надо, но я не стал полностью переписывать код программы, состоящей из нескольких модулей, и обошелся костылем. В функции с главным циклом добавил условие, которое увеличивает лимит рекурсии если её текущая глубина отстаёт меньше, чем на 100:

def mainloop(self):

if len(inspect.getouterframes(inspect.currentframe())) > sys.getrecursionlimit() - 100:
    sys.setrecursionlimit(sys.getrecursionlimit() + 100)

Не очень красивое решение, но работает!