Как получить трассировку стека из epydoc при загрузке моего кода? - PullRequest
1 голос
/ 23 января 2010

Когда я загружаю свой код в epydoc и просто загружаю верхний модуль, происходит сбой:

Error: TypeError: 'NoneType' object is not callable (line 10)

Где NoneType, на который он ссылается, это подмодуль, который я попытался загрузить в строке 9. Как я могу получить epydoc, чтобы объяснить, почему он не может загрузить модуль в строке 9 вместо того, чтобы просто пахать вперед и нажал ошибку?

По запросу Носко. Вот аналогичный пример, где не дается трассировка стека:

# foo.py
import bar
bar.baz()

# bar.py

def baz():
    print 'baz'

import os
os.environ['DOES_NOT_EXIST']

Запуск с:

python2.6 epydoc --html foo.py

Производит менее чем полезное:

    +--------------------------------------
    | In /home/ross/foo.py:
    | Import failed (but source code parsing was successful).
    |     Error: KeyError: 'DOES_NOT_EXIST' (line 1)
Я хочу, чтобы epydoc сообщил мне, что ошибка находится на 6-й строке bar.py. Я не хочу жаловаться на импорт foo.py из bar.py. Я не могу воспроизвести мою специфическую проблему в небольшом примере, но мой основной запрос заключается в том, что при сбое epydoc я хочу напечатать трассировку стека, чтобы указать на проблему. Будь то загрузка субмодуля или вызов не найдя ключ в словаре.

ПРИМЕЧАНИЕ. Корень этой проблемы заключается в том, что код, который я пытаюсь задокументировать, является входом для SCons, у которого возникают различные проблемы с настройкой среды. Вот почему, когда я запускаю в epydoc, он не работает, но скрипт все еще работает при запуске с scons -f SConstruct.py. Я также пытаюсь сгенерировать документацию с sphinx. Когда я запускаю с sphinx, он фактически показывает трассировку стека. Может быть, я пойду с sphinx ...

1 Ответ

2 голосов
/ 23 января 2010

Так что, если я правильно понимаю, модуль, на котором вы запускаете epydoc, импортирует модуль с ошибкой (а не модуль, для которого вы хотите сгенерировать документы)?

Если все, что вам нужно сделать, это увидеть строку в файле с ошибкой, чтобы вы могли отладить ее, вы можете также передать этот файл и номер строки, где произошла ошибка, будет указан для этот модуль.

Итак, выполнение:

epydoc --check foo.py bar.py

Выводит:

+------------------------------------------------------------------------------------------------------------
| In /home/mark/Desktop/foo.py:
| Import failed (but source code parsing was successful).
|     Error: KeyError: 'DOES_NOT_EXIST' (line 2)
|   
+------------------------------------------------------------------------------------------------------------
| In /home/mark/Desktop/bar.py:
| Import failed (but source code parsing was successful).
|     Error: KeyError: 'DOES_NOT_EXIST' (line 7)
|   

Так как Bar.py также анализируется, строканомер, где произошла ошибка в этом файле.

Теперь, если вы ищете более надежное решение, потому что это распространенная проблема, с которой вам нужно разобраться, вам придется начинать взлом epydoc внутренние органы.Сделав это сам, я бы посоветовал вам не бежать по этой кроличьей норе, если можете.Если вариант с Sphinx является опцией, я бы порекомендовал этот маршрут.

...