2009-08-10 3 views
0

Ich habe eine Klasse, dieWarum würde traceback.extract_stack() return [] zurückgeben, wenn es definitiv einen Call-Stack gibt?

traceback.extract_stack() 

in seiner __init__() nennt, aber wenn ich das tun, wird der Wert von traceback.extract_stack() ist [].

Aus welchen Gründen könnte dies der Fall sein? Gibt es eine andere Möglichkeit, eine zuverlässigere Rückverfolgung zu erhalten?

Ich denke, das Problem ist, dass der Code in Pylons läuft. Hier ist ein Code für eine Controller-Aktion:

def test_tb(self): 
    import traceback 
    return a.lib.htmlencode(traceback.extract_stack()) 

Es eine Webseite erzeugt, die gerade ist

[] 

Also, ich glaube nicht, dass irgendetwas im Konstruktor eines Objekts zu tun hat mit dem Sein oder so ähnlich. Könnte es mit einer Inkompatibilität zwischen einigen Arten von Threading und dem Traceback-Modul oder etwas ähnlichem zu tun haben?

Antwort

0

auf dem Code der Suche nach dem Zurückverfolgungsmodul, ist eine Möglichkeit, dass Sie sys.tracebacklimit auf Null gesetzt haben, obwohl das wie ein gewagtes Spiel scheint ...

1

Nach zeigt traceback.extract_stack() zu arbeiten, wenn von einer Klasse __init__ Methode aufgerufen. Bitte poste deinen Code, der zeigt, dass es nicht funktioniert. Schließen Sie die Python-Version ein. Tippe nicht aus dem Speicher; benutze copy/paste wie ich es gemacht habe.

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import traceback as tb 
>>> tb.extract_stack() 
[('<stdin>', 1, '<module>', None)] 
>>> def func(): 
...  print tb.extract_stack() 
... 
>>> func() 
[('<stdin>', 1, '<module>', None), ('<stdin>', 2, 'func', None)] 
>>> class Klass(object): 
...  def __init__(self): 
...   print tb.extract_stack() 
... 
>>> k = Klass() 
[('<stdin>', 1, '<module>', None), ('<stdin>', 3, '__init__', None)] 
>>> 

UPDATE Statt bei return a.lib.htmlencode(traceback.extract_stack()) und fragen, von der Suche, tippen Sie in die Pipeline:

(1) tun tb_stack = repr((traceback.extract_stack()) und das Ergebnis auf Ihre Log-Datei schreiben zu überprüfen

(2) tun return a.lib.htmlencode(some_known_constant_data) und überprüfen Sie, ob die bekannten Daten korrekt angezeigt werden, wo Sie erwarten, dass sie angezeigt werden.

0

Der Grund war, dass jemand Pysco an dem Projekt angemacht hat und Psyco nicht gut mit dem Traceback-Modul spielt.

Verwandte Themen