Python LinuxWindowsmacOS

Python: RecursionError: maximum recursion depth exceeded

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Рекурсия слишком глубока или бесконечна. Добавьте базовый случай, замените цикл или используйте стек.

В этой статье
  1. Что означает ошибка
  2. Причины и признаки
  3. Пошаговое решение
  4. Если проблема осталась

#Что означает ошибка

Сообщение
maximum recursion depth exceeded

Рекурсия слишком глубока или бесконечна. Добавьте базовый случай, замените цикл или используйте стек.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Нет базыОдна функция повторяется без приближения к завершениюДобавить достижимый базовый случай
Глубокая рекурсияВызовы конечны, но глубина превышает лимит PythonПереписать обход с явным стеком
Взаимные вызовыA вызывает B, B снова A без условий выходаРазорвать взаимную рекурсию
__getattr__В трассировке повторяется доступ к атрибуту объектаПроверить __getattr__ и делегирование

#Пошаговое решение

  1. Найдите повторяющийся вызов в трассировкеВ терминале проекта запустите программу и прокрутите traceback от конца вверх. Запишите функцию и строку, повторяющиеся перед RecursionError. Откройте файл в редакторе и поставьте точку останова либо временно выведите аргументы через print в начале этой функции. Если аргументы не меняются или число оставшихся элементов не уменьшается, это признак отсутствующего условия завершения.
  2. Добавьте базовый случай, который достигаетсяПроверьте функцию рекурсии: до следующего вызова должен проверяться простой случай, например if n <= 1: return 1 для рекурсивного вычисления факториала положительного числа. На каждом проходе аргумент должен приближаться к базовому случаю, например n - 1. Для обхода графа или дерева добавьте учёт уже посещённых узлов, чтобы связи с циклами не запускали бесконечные переходы. Сохраните исходную версию кода и добавьте проверку отрицательных или неожиданно больших входных данных.
  3. Для глубокой корректной рекурсии выберите итерациюЕсли алгоритм конечный, но входные данные содержат тысячи уровней, перепишите обход на цикл с явным списком-стеком stack = [root] и обработкой через while stack:. Увеличивать лимит командой sys.setrecursionlimit(...) ради обхода ошибки опасно: большой лимит может привести к аварийному завершению интерпретатора из-за переполнения стека C. Используйте такой метод лишь при понимании глубины и доступного стека, а не как основное исправление.
  4. Проверьте крайние случаи и отсутствие новых цикловЗапустите модульные тесты либо повторите входные данные, ранее вызывавшие ошибку. Затем проверьте пустой ввод, одно значение и случай с зацикленными ссылками. Успех — нет RecursionError, результат совпадает с ожидаемым и использование памяти не растёт без конца. Если проблема возникает только в стороннем пакете, сохраните версии Python и пакета и минимальный пример, не редактируйте установленную библиотеку напрямую.

#Если проблема осталась

Если «Python: RecursionError: maximum recursion depth exceeded» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.