2010-10-13 97 views
42

我的類的一個實例變量正在發生某些事情。我想讓變量成爲一個屬性,並且每當它被訪問時,我都想打印出導致該點的所有代碼的堆棧跟蹤,以便我可以看到它被混淆的位置。如何在沒有發生異常時打印出堆棧跟蹤?我知道是否有例外,我可以像traceback.format_tb(sys.exc_info()[2])這樣做。打印python堆棧跟蹤無例外地被提出

另外可能有用的是僅打印最後的3-4個關卡,因爲前幾個關卡可能不會那麼有趣。

回答

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 

編輯:您還可以使用extract_stack,分得一杯羹(如stack[5:]用於排除第5級),並使用format_list拿到打印的堆棧跟蹤('\n'.join(traceback.format_list(...))

+1

感謝編輯,它幫助了[這個答案](http://stackoverflow.com/a/16589622/321973)一個非常普通的'full_stack()'函數! – 2013-05-16 14:05:44