2013-07-22 2 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

Maxium уровень рекурсии meaby? –

ответ

1

В python существует максимальный предел рекурсии. по умолчанию 1000. Вы можете видеть, что, набрав:

import sys 
print sys.getrecursionlimit() 

в терминале.

Если вы хотите увеличить его использовать:

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

о интересном, так это только начинается trowing ошибки после того, как предел рекурсии передаются – Serial

+0

ОК спасибо! – Serial

+0

Добро пожаловать. –

2

Каждый вызов функции создает кадр стека, и каждый возврат выскакивает кадр из стека. Это означает, что если вы слишком медленно переходите, не возвращаясь, Python выйдет из комнаты в стеке и выбросит исключение. Вы можете увеличить лимит, но большую часть времени это заставит вашу программу работать немного до сбоя, или, что еще хуже, интерпретатор Python испортит ее память и сойдет с ума.

+0

Я вижу, спасибо! – Serial

Смежные вопросы