为什么在有肯定的调用堆栈时traceback.extract_stack()会返回[]?

时间:2009-08-10 01:43:15

标签: python stack-trace

我有一个叫

的班级
traceback.extract_stack()

在其__init__()中,但每当我这样做时,traceback.extract_stack()的值为[]

可能出现这种情况的原因是什么? 是否有其他方法可以获得更可靠的追溯?

我认为问题是代码在Pylons中运行。以下是控制器操作的一些代码:

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

它会生成一个只是

的网页
[] 

所以,我认为它与在一个对象的构造函数或类似的东西中没有任何关系。它可能与某些类型的线程和回溯模块之间的不兼容性有关吗?

3 个答案:

答案 0 :(得分:1)

以下显示了从类的__init__方法调用时traceback.extract_stack()的工作原理。请发布您的代码,表明它不起作用。包括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)]
>>>

更新而不是查看return a.lib.htmlencode(traceback.extract_stack())并想知道,请点按管道:

(1)执行tb_stack = repr((traceback.extract_stack())并将结果写入日志文件以进行检查

(2)执行return a.lib.htmlencode(some_known_constant_data)并检查已知数据是否正确显示在您希望显示的位置。

答案 1 :(得分:0)

查看回溯模块的代码,一种可能性是你已经将sys.tracebacklimit设置为零,虽然这看起来像是一个远景......

答案 2 :(得分:0)

原因是有人在项目上打开了Psycho,并且Psycho对跟踪模块不起作用。