我在网上看到类似的问题,但没有一个答案可以帮助我。我有一个函数,每行数据(数据有大约2'000 '000行)做一些事情,然后调用相同的函数与不同的参数取决于它已经做了什么。问题是,过了一段时间,我得到这个错误在终端:'致命Python错误:无法从堆栈溢出中恢复。'
看起来导致这个错误的最常见的错误是无限循环,但是我控制了并且没有无限循环。因此,对我来说,问题是'sys.getrecursionlimit()'被设置为3000,这意味着在3000次调用同一个函数后,它会给我错误。
第一件事是,我不明白"致命的Python错误:无法从堆栈溢出中恢复。",或者返回" RecursionError:最大递归深度超过了jupyternotebook中的comparison。事实上,对我来说,它可能来自同样的错误(eidogg.无限循环)。
当用一个简单的函数'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
无
― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ―
在测试_(x,t)5中x = x +1 6如果x 7测试_(x = x,t = t)8 9打印(测试_(0,2971))
...重复最后1帧,从下面的帧开始...
在测试_(x,t)5中x = x +1 6如果x 7测试_(x = x,t = t)8 9打印(测试_(0,2971))
递归错误:在比较中超过最大递归深度
为了克服这个问题,我在不失去"运行连续性"的情况下修改了函数,以便我可以使用批处理:
for i in np.arange(0,9000,2000):
test_(i,i+2000)
有人有更好的解决方案吗?还有,一般来说,当我们知道有很多迭代要做的时候,做递归函数是个坏主意?还有,有人知道我怎么在每个循环中打印递归深度吗?
我正在用jupyter笔记本和python 3.6开发一个Linux虚拟环境。
2条答案
按热度按时间wlzqhblo1#
请检查这个问题(它对我有效):How do I get the current depth of the Python interpreter stack?
你的代码基于这个答案:
输出:
jtjikinw2#
我的问题是在连接不好的情况下向某个API发送请求。这是一个使用
bot.polling()
方法的库,所以可能是请求溢出之类的。