2009-08-10 289 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对跟踪模块不太满意。

相关问题