2010-10-13 14 views
42

Sta accadendo qualcosa con una delle variabili di istanza della mia classe. Voglio rendere la variabile una proprietà, e ogni volta che si accede voglio stampare la traccia dello stack di tutto il codice che porta fino a quel punto, così posso vedere dove è stato incasinato. Come posso stampare la traccia dello stack quando non è stata sollevata alcuna eccezione? So che se c'è un'eccezione posso fare qualcosa come traceback.format_tb(sys.exc_info()[2]).traccia dello stack python di stampa senza sollevare nessuna eccezione

Anche quello che potrebbe essere utile è stampare solo gli ultimi 3-4 livelli, poiché i primi pochi probabilmente non saranno così interessanti.

risposta

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: È inoltre possibile utilizzare extract_stack, prendere una fetta (ad es stack[5:] per escludere i primi 5 livelli) e utilizzare format_list per ottenere uno stacktrace pronti per la stampa ('\n'.join(traceback.format_list(...)))

+1

Grazie per la modifica, mi ha aiutato con [questa risposta] (http://stackoverflow.com/a/16589622/321973) per una funzione 'full_stack()' molto generale! –

Problemi correlati