致命的Python错误:无法从堆栈溢出中恢复

ebdffaop  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(169)

我在网上看到类似的问题,但没有一个答案可以帮助我。我有一个函数,每行数据(数据有大约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虚拟环境。

wlzqhblo

wlzqhblo1#

请检查这个问题(它对我有效):How do I get the current depth of the Python interpreter stack?
你的代码基于这个答案:

import sys
import inspect
print(sys.getrecursionlimit())

def test_(x, t):
    print(len(inspect.stack()))
    x = x + 1
    if x < t:
        test_(x=x, t=t)

print(test_(0, 7))

输出:

22
23
24
25
26
27
28
None
jtjikinw

jtjikinw2#

我的问题是在连接不好的情况下向某个API发送请求。这是一个使用bot.polling()方法的库,所以可能是请求溢出之类的。

相关问题