2013-07-22 82 views
0

我是班瞎搞,我想我可以嘗試,使一類只是循環錯誤,同時運行「classloop」

這裏是我做過什麼:

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

只是想知道爲什麼這會突然發生,爲什麼它不能保持循環?

+0

什麼是「一段時間「? – Jiminion

+0

像400迭代身邊有 – Serial

+0

最大信號遞歸級別meaby? –

回答

1

在Python中有一個最大遞歸限制。 默認值是1000 你可以看到,通過鍵入:在終端

import sys 
print sys.getrecursionlimit() 

如果你想增加它使用:

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

哦有趣所以它只是開始,一旦遞歸限制傳遞 – Serial

+0

trowing錯誤好的,謝謝!! – Serial

+0

不客氣 –

2

每個函數調用創建堆棧幀,每一回離開本層的框架。這意味着如果你在不返回的情況下遞歸得太深,Python將在堆棧中的空間不足並拋出異常。你可以增加限制,但大多數情況下,這隻會讓你的程序在崩潰之前運行一段時間,或者更糟的是,Python解釋器會破壞它的內存並且變得瘋狂。

+0

我看到謝謝! – Serial