0

我有一堂课叫

traceback.extract_stack()

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

出现这种情况的原因有哪些?是否有另一种更可靠的追溯方式?

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

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

它生成的网页只是

[] 

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

4

3 回答 3

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)并检查已知数据是否正确显示在您期望的位置。

于 2009-08-10T01:59:31.243 回答
0

查看 traceback 模块的代码,一种可能性是您已将 sys.tracebacklimit 设置为零,尽管这看起来很遥远......

于 2009-08-10T01:49:11.990 回答
0

原因原来是有人在项目上开启了 Pysco,而 Psyco 对 traceback 模块的配合并不好。

于 2009-08-10T20:49:27.827 回答