python读取文件数据堆栈溢出的原因_致命的Python错误:无法从堆栈溢出中恢复

我在互联网上阅读类似的问题,但没有一个答案可以帮助我 . 我有一个函数,对于每行数据(数据有大约2'000'000行)做某事,然后根据它做了什么,用不同的参数调用相同的函数 . 问题是,经过一段时间后,我在终端中收到此错误:'致命的Python错误:无法从堆栈溢出中恢复 .

它会导致导致此错误的最常见错误是无限循环,但我控制并且没有无限循环 . 因此,对我来说问题'sys.getrecursionlimit()'设置为3000,这意味着在3000调用相同的函数后它会给我错误 .

首先,我不明白'致命的Python错误:无法从堆栈溢出中恢复'之间的区别 . 在终端中,或jupyternotebook中的'RecursionError:超出比较的最大递归深度' . 实际上,对我而言,它可能来自同样的错误(例如无限循环) .

当用一个名为'test_'的简单函数替换我的函数时,我有以下代码:

import sys

print(sys.getrecursionlimit())

def test_(x,t):

x = x+1

if x

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(最近一次调用last)in()8 9 print(test_(0,2971)) ---> 10打印(test_(0,2972))in test_(x,t)5 x = x 1 6 if x 7 test_(x = x,t = t)8 9 print(test_(0,2971) )...最后1帧重复,从下面的帧...在test_(x,t)5 x = x 1 6如果x 7 test_(x = x,t = t)8 9打印(test_(0, 2971))RecursionError:比较时超出了最大递归深度

为了克服这个问题,我调整了函数而没有失去“运行的连续性”,因此我可以使用批次:

for i in np.arange(0,9000,2000):

test_(i,i+2000)

有人会有更好的解决方案吗?另外,一般来说,当我们知道要进行大量迭代时,做递归函数是个坏主意吗?也有人知道我怎么能在每个循环打印recursiondeepth?

我正在研究一个Linux虚拟环境,使用jupyter笔记本,在python 3.6上使用anaconda .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值