Python Stacktrace: словарь namedfuncs со странным синтаксисом: "Class '>. Method" - PullRequest
1 голос
/ 08 декабря 2011

Когда я смотрю на словарь, сгенерированный с помощью:

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 третья запись кортежа выглядит ожидаемой, без'> bit.

У вас есть идея, откуда это происходит и почему это происходит на одной машине, а не на другой?

1 Ответ

0 голосов
/ 08 декабря 2011

Вы уверены, что не имели в виду 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, и тогда вы сможете понять, что она на самом деле должна сказать.

...