2009-08-10 6 views
0

J'ai une classe qui appellePourquoi traceback.extract_stack() renvoie [] quand il y a définitivement une pile d'appels?

traceback.extract_stack() 

dans son __init__(), mais chaque fois que je fais cela, la valeur de traceback.extract_stack() est [].

Pour quelles raisons cela pourrait-il être le cas? Existe-t-il un autre moyen d'obtenir un retraçage plus fiable?

Je pense que le problème est que le code s'exécute dans Pylons. Voici un code pour une action de contrôleur:

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

Il génère une page Web qui est juste

[] 

Donc, je ne pense pas que cela n'a rien à voir avec dans le constructeur d'un objet ou quelque chose comme ça. Cela pourrait-il avoir à faire avec une incompatibilité entre certains types de threads et le module de traceback ou quelque chose comme ça?

Répondre

0

En regardant le code pour le module de retraçage, une possibilité est que vous avez fixé sys.tracebacklimit à zéro, bien que cela semble comme un Longshot ...

1

suivant montre traceback.extract_stack() travaillant en appelé à partir de la méthode __init__ d'une classe. S'il vous plaît poster votre code montrant que cela ne fonctionne pas. Incluez la version de Python. Ne tapez pas de la mémoire; utilisez copier/coller comme je l'ai fait.

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)] 
>>> 

MISE À JOUR Au lieu de regarder return a.lib.htmlencode(traceback.extract_stack()) et je me demandais, puiser dans le pipeline:

(1) faire tb_stack = repr((traceback.extract_stack()) et écrire le résultat de votre fichier journal pour vérifier

(2) faire return a.lib.htmlencode(some_known_constant_data) et vérifiez que les données connues s'affichent correctement à l'endroit où vous vous le rendez.

0

La raison s'est avérée être que quelqu'un a activé Pysco sur le projet, et Psyco ne joue pas bien avec le module de traceback.

Questions connexes