Python Stacktrace:带有奇怪语法的calledfuncs字典:“Class'> .method”

时间:2011-12-08 11:25:13

标签: python syntax stack-trace trace

当我查看使用以下内容生成的字典时:

import trace
tracer = trace.Trace(countfuncs=True)
tracer.runfunc(callableObj, *args, **kwargs)
print tracer.results().calledfuncs

在一台机器上(python 1.3)我得到了一个奇怪的语法,用于打印字典的键;关键看起来像:

('/path/to/file.py', 'module', "SomeClass'>.some_method")

我想知道的是角色:'>

在使用python 1.3.1的另一台机器上,第三个元组条目看起来像预期的,没有'>位。

您是否知道它来自何处?为什么它在一台机器而不在另一台机器上?

1 个答案:

答案 0 :(得分:0)

你确定你不是指Python 2.3吗?

在trace.py中,类名从:

计算
    ...
        clsname = str(classes[0])
    ...
    if clsname is not None:
        # final hack - module name shows up in str(cls), but we've already
        # computed module name, so remove it
        clsname = clsname.split(".")[1:]
        clsname = ".".join(clsname)
        funcname = "%s.%s" % (clsname, funcname)

通常str(someclass)会为您提供类似module.klass的内容,因此在点上拆分会为您提供一个干净的名称。由于某种原因,您正在查看的系统上的类正在给出一个以您看到的字符串结尾的repr,因此它可能类似于<proxy for 'module.klass'>

我会尝试在该机器上编辑trace.py(暂时)不拆分clsname变量,然后你就可以弄明白它应该说什么了。