Как узнать текущую глубину рекурсии в python?
Нагуглил, что вывести текущий лимит (1000 по умолчанию) и изменить его можно с помощью модуля sys. Но как вывести именно текущую глубину погружения в рекурсию в определенный момент времени? В sys такого не нашел. Например, что нужно добавить в func_2 в таком коде, что бы печаталась глубина рекурсии при каждом входе в эту функцию?
def func_1():
func_2()
def func_2():
func_1()
Ответы (1 шт):
Ответ дали в комментариях, так что отвечу на собственный вопрос, может кому пригодится. За ответ спасибо 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)
Не очень красивое решение, но работает!