【问题标题】:Error while running 'classloop'运行“类循环”时出错
【发布时间】:2013-07-21 18:35:55
【问题描述】:

我在搞乱类,我想我可以试着让一个类只是循环

这就是我所做的:

class A():
    def __init__(self):
        print 1
        self.loop()

    def loop(self):
        print 2
        self.__init__()
A()

它会打印 1 和 2,然后打印第四个一段时间,然后我收到一个错误,开始循环,如下所示:

Traceback (most recent call last):
  File "C:/Python27/classloop.py", line 12, in <module>
    A()

然后它开始循环这两个错误和第四个:

File "C:/Python27/classloop.py", line 4, in __init__
    self.loop()
File "C:/Python27/classloop.py", line 9, in loop
    self.__init__()

只是想知道为什么会突然发生这种情况,为什么它不一直循环?

【问题讨论】:

  • 大概有 400 次迭代
  • 最大递归级别meaby?
  • 它在 1000 行这些错误之后抛出最大递归

标签: python class loops error-handling


【解决方案1】:

每个函数调用都会创建一个栈帧,每次返回都会从栈中弹出一个帧。这意味着如果你递归太深而没有返回,Python 将耗尽堆栈空间并抛出异常。您可以增加限制,但大多数情况下,这只会让您的程序在崩溃之前运行更长时间,或者更糟糕的是,Python 解释器会损坏其内存并发疯。

【讨论】:

    【解决方案2】:

    在 python 中有一个最大递归限制。 默认值为 1000。 您可以通过键入以下内容来查看:

    import sys
    print sys.getrecursionlimit()
    

    在终端中。

    如果你想增加它使用:

    sys.setrecursionlimit(10000) # 10000 is just an example
    

    【讨论】:

    • 哦,有趣的是,一旦超过递归限制,它就会开始抛出错误
    猜你喜欢
    • 2019-01-19
    • 2015-05-30
    • 1970-01-01
    • 2020-07-02
    • 2016-02-14
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多