2010-10-13 5 views
42

Quelque chose se passe avec l'une des variables d'instance de ma classe. Je veux faire de la variable une propriété, et chaque fois qu'on y accède, je veux imprimer la trace de la pile de tout le code qui mène à ce point, afin que je puisse voir où elle se trouve. Comment imprimer la trace de la pile lorsqu'aucune exception n'a été levée? Je sais s'il y a une exception que je peux faire quelque chose comme traceback.format_tb(sys.exc_info()[2]).trace trace de la pile python sans exception soulevée

Aussi, ce qui pourrait être utile est d'imprimer seulement les 3-4 derniers niveaux, puisque les premiers ne seront probablement pas si intéressants.

Répondre

64

traceback.print_stack():

>>> def f(): 
... def g(): 
...  traceback.print_stack() 
... g() 
... 
>>> f() 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 4, in f 
    File "<stdin>", line 3, in g 

Edit: Vous pouvez également utiliser extract_stack, prendre une tranche (par exemple stack[5:] pour exclure les 5 premiers niveaux) et utiliser format_list pour obtenir un prêt pour l'impression stacktrace ('\n'.join(traceback.format_list(...)))

+1

Merci pour l'édition, cela m'a aidé avec [cette réponse] (http://stackoverflow.com/a/16589622/321973) pour une fonction 'full_stack()' très générale! –

Questions connexes