2010-10-13 15 views
42

Coś się dzieje z jedną ze zmiennych instancji mojej klasy. Chcę, aby zmienna była właściwością, a ilekroć jest dostępna, chcę wydrukować ślad stosu całego kodu prowadzącego do tego punktu, więc mogę zobaczyć, gdzie jest on pomieszany. Jak wydrukować stos śledzenia, gdy nie został zgłoszony żaden wyjątek? Wiem, że jeśli istnieje wyjątek, mogę zrobić coś takiego, jak traceback.format_tb(sys.exc_info()[2]).wydruk śledzenia stosu python bez wyjątku podniesiony

Warto również wydrukować tylko ostatnie 3-4 poziomy, ponieważ kilka pierwszych prawdopodobnie nie będzie tak interesujących.

Odpowiedz

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: Można również użyć extract_stack, wziąć kawałek (np stack[5:] dla wykluczyć pierwszych 5 poziomów) i używać format_list aby uzyskać wydruk gotowy StackTrace ('\n'.join(traceback.format_list(...)))

+1

Dzięki za edycję, pomógł mi z [tą odpowiedzią] (http://stackoverflow.com/a/16589622/321973) dla bardzo ogólnej funkcji 'full_stack()'! –

Powiązane problemy