2013-01-15 1 views
5

Sto cercando di capire che cosa causa questo errore quando eseguo la mia app utilizzando il server Flask di base durante lo sviluppo. Comincio con questo:Occasional Flask server error: 'RuntimeError: superata la profondità massima di ricorsione durante la chiamata a un oggetto Python'

from myapp import app 
app.run(debug=True, port=5001) 

tutto va bene e io continuerò a codice e aggiornare ecc, ma poi dopo un po 'l'errore ricorsione e devono Ctrl-C il server e riavviarlo. Non è un grosso problema, solo un po 'fastidioso dover affrontare ogni tanto.

Ecco il traceback pieno, che ho cercato di utilizzare per determinare la causa, ma non riesco a vedere niente che si distingue (forse qualcosa a che fare con il modo in werkzeug utilizza Cookie.py?):

Traceback (most recent call last): 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/wsgi.py", line 411, in __call__ 
    return self.app(environ, start_response) 
    (last bit repeated a bunch - trimmed to fit in posting size requirements) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/flask/app.py", line 1685, in wsgi_app 
    with self.request_context(environ): 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/flask/ctx.py", line 274, in __enter__ 
    self.push() 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/flask/ctx.py", line 238, in push 
    self.session = self.app.open_session(self.request) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/flask/app.py", line 792, in open_session 
    return self.session_interface.open_session(self, request) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/flask/sessions.py", line 191, in open_session 
    secret_key=key) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/contrib/securecookie.py", line 309, in load_cookie 
    data = request.cookies.get(key) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/utils.py", line 77, in __get__ 
    value = self.func(obj) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/wrappers.py", line 418, in cookies 
    cls=self.dict_storage_class) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/http.py", line 741, in parse_cookie 
    cookie.load(header) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/Cookie.py", line 632, in load 
    self.__ParseString(rawdata) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/Cookie.py", line 665, in __ParseString 
    self.__set(K, rval, cval) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/_internal.py", line 290, in _BaseCookie__set 
    morsel = self.get(key, _ExtendedMorsel()) 
    File "/Users/jeff/.virtualenvs/fmll/lib/python2.7/site-packages/werkzeug/_internal.py", line 271, in __init__ 
    Morsel.__init__(self) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/Cookie.py", line 438, in __init__ 
    dict.__setitem__(self, K, "") 
RuntimeError: maximum recursion depth exceeded while calling a Python object 
+1

inserisci il codice della tua app. – elssar

+0

È su Github [qui] (https://github.com/pssdbt/flask-skeleton). Avrei dovuto includerlo, ma non perché mi è successo un paio di volte finora su diverse app (non tutte basate su questo). – jeffff

+0

Anche io sto vedendo questo. –

risposta

1

Dal si verifica durante il processo di sviluppo, si potrebbe aumentare limite di ricorsione, prima di avviare il server, utilizzando:

sys.setrecursionlimit(2000) # Choose the right figure for you here 
# the value on my system is 1000 but this is platform-dependant 

Tuttavia, non si dovrebbe usare con molta attenzione e, probabilmente, nella produzione a meno che non si dispone di una buona conoscenza del suo impatto.

Rif: http://docs.python.org/2/library/sys.html#sys.setrecursionlimit

+0

Andando a dare un colpo e vedere se aiuta. Non ho incontrato il problema in produzione, solo da eseguire tramite uno script runserver.py (che in pratica è app.run (debug = True)). – jeffff