Я прочитал в интернете похожую проблему, но ни один из ответов мне не помог.У меня есть функция, которая для каждой строки данных (данные имеют около 2 000 000 строк) что-то делает, а затем вызывает ту же функцию с другим параметром в зависимости от того, что она сделала.Проблема в том, что через некоторое время я получаю эту ошибку в терминале: «Неустранимая ошибка Python: невозможно восстановить после переполнения стека».
Похоже, что наиболее частой ошибкой, вызывающей эту ошибку, является бесконечный цикл, но я контролировали не имеют бесконечного цикла.Следовательно, для меня проблема заключается в том, что sys.getrecursionlimit () 'установлен на 3000, что означает, что после вызова 3000 той же функции это выдаст мне ошибку.
Первое, что яне понимает разницу между «фатальной ошибкой Python: невозможно восстановить после переполнения стека».в терминале или 'RecursionError: максимальная глубина рекурсии, превышенная в сравнении' в jupyternotebook.Действительно, для меня это может произойти из-за той же ошибки (например, бесконечный цикл).
Когда я заменяю свою функцию на простую, называемую test_, у меня есть следующий код:
import sys
print(sys.getrecursionlimit())
def test_(x,t):
x = x+1
if x<t:
test_(x=x,t=t)
print(test_(0,2971)) # output: None
print(test_(0,2972)) # RecursionError: maximum recursion depth exceeded in comparison
3000
Нет
--------------------------------------------------------------------------- RecursionError Traceback (последний вызов последний) in () 8 9 print (test_ (0,2971)) ---> 10 print (test_ (0,2972))
in test_ (x, t) 5 x = x + 1 6, еслиx 7 test_ (x = x, t = t) 8 9 отпечаток (test_ (0,2971))
... повторяются последние 1 кадр из кадра ниже ...
в test_ (x, t) 5 x = x + 1 6, если x 7 test_ (x = x, t = t) 8 9 print (test_ (0,2971))
RecursionError: превышена максимальная глубина рекурсиидля сравнения
Чтобы преодолеть эту проблему, я адаптировал функцию, не теряя «непрерывность цикла», чтобы я мог использовать партии:
for i in np.arange(0,9000,2000):
test_(i,i+2000)
Будет ли у кого-нибудь более хорошее решение?Кроме того, вообще плохая идея делать рекурсивную функцию, когда мы знаем, что у нас много итераций?Также кто-нибудь знает, как я могу печатать глубину рекурсии в каждом цикле?
Я работаю над виртуальным окружением Linux, с ноутбуком jupyter, на python 3.6 с anaconda.