运行'classloop'时出错

时间:2013-07-22 21:12:30

标签: python class loops error-handling

我正在搞乱课程,并认为我可以尝试让课程循​​环

这就是我所做的:

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__()

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

import sys
print sys.getrecursionlimit()

在终端。

如果你想增加它,请使用:

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