2010-10-13 16 views
42

Sınıfımın örnek değişkenlerinden biri ile bir şeyler oluyor. Değişkeni bir özellik yapmak istiyorum ve her erişildiğinde, o noktaya kadar giden tüm kodun yığın izini yazdırmak istiyorum, böylece nerede karıştığını görebiliyorum. Bir istisna kaldırılmadığında yığın izlemeyi nasıl yazdırırım? Bir istisna olup olmadığını biliyorum, traceback.format_tb(sys.exc_info()[2]) gibi bir şey yapabilirim.baskı python yığın izlemesi istisna olmaksızın kaldırıldı

Ayrıca, yararlı olan şey, muhtemelen son 3-4 seviyesini basmaktır, çünkü ilk birkaç muhtemelen bu kadar ilginç olmayacaktır.

cevap

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 

Düzenleme: Ayrıca, bir baskıya hazır stacktrace almak için bir dilim almak, extract_stack kullanmak (örn stack[5:] için ilk 5 seviyeleri hariç) ve format_list kullanabilirsiniz ('\n'.join(traceback.format_list(...)))

+1

Düzenleme için teşekkürler, çok genel bir full_stack() işlevi için [bu cevap] (http://stackoverflow.com/a/16589622/321973) ile bana yardımcı oldu! –

İlgili konular