2009-08-10 53 views
0

我有一個調用爲什麼traceback.extract_stack()在肯定有調用堆棧時返回[]?

traceback.extract_stack() 
在其 __init__()

一類,但每當我做到這一點,的traceback.extract_stack()[]

有什麼原因可能導致這種情況? 是否有另一種方法獲得更可靠的回溯?

我認爲問題在於代碼在Pylons中運行。這裏是一個控制器的動作有些代碼:

def test_tb(self): 
    import traceback 
    return a.lib.htmlencode(traceback.extract_stack()) 

它生成一個網頁,這只是

[] 

所以,我不認爲這有什麼用一個對象的構造是或類似的東西。它可能與某些類型的線程和追蹤模塊之間的不兼容性有關嗎?

回答

0

查看的是回溯模塊的代碼,一種可能性是,你有sys.tracebacklimit設置爲零,儘管這似乎是一個鐵打...

1

繼節目traceback.extract_stack()工作時從類的__init__方法調用。請發佈您的代碼,證明它不起作用。包括Python版本。不要從內存中鍵入;像我一樣使用複製/粘貼。

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import traceback as tb 
>>> tb.extract_stack() 
[('<stdin>', 1, '<module>', None)] 
>>> def func(): 
...  print tb.extract_stack() 
... 
>>> func() 
[('<stdin>', 1, '<module>', None), ('<stdin>', 2, 'func', None)] 
>>> class Klass(object): 
...  def __init__(self): 
...   print tb.extract_stack() 
... 
>>> k = Klass() 
[('<stdin>', 1, '<module>', None), ('<stdin>', 3, '__init__', None)] 
>>> 

UPDATE而不是看着return a.lib.htmlencode(traceback.extract_stack())和疑惑,請點擊進入管道:

(1)做tb_stack = repr((traceback.extract_stack())並將結果寫入到您的日誌文件檢查

(2)做return a.lib.htmlencode(some_known_constant_data)並檢查已知數據是否正確顯示在您希望顯示的位置。

0

原因竟然是有人在項目上打開了Pysco,而Psyco對跟蹤模塊不太滿意。