Как получить трассировку стека из epydoc при загрузке моего кода?
Когда я загружаю свой код в 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
Производит менее чем полезное:
+ -------------------------------------- | В /home/ross/foo.py: | Не удалось импортировать (но разбор исходного кода прошел успешно). | Ошибка: KeyError: 'DOES_NOT_EXIST' (строка 1)Я хочу, чтобы epydoc сообщил мне, что ошибка находится на 6-й строке
bar.py
, Я не хочу жаловаться foo.py
ввоз bar.py
, Я не могу воспроизвести мою конкретную проблему в небольшом примере, но мой основной запрос заключается в том, чтобы при сбое epydoc я хотел, чтобы он напечатал трассировку стека, чтобы указать на проблему. Будь то загрузка субмодуля или вызов не найдя ключ в словаре.ПРИМЕЧАНИЕ. Корень этой проблемы заключается в том, что код, который я пытаюсь задокументировать, является входом для SCons, у которого есть различные проблемы с настройкой среды. Вот почему, когда я бегу в epydoc
это не работает, но скрипт все еще работает при запуске с scons -f SConstruct.py
, Я также пытаюсь сгенерировать документацию с sphinx
, Когда я бегу с sphinx
это фактически показывает трассировку стека. Может быть, я пойду с sphinx
...
1 ответ
Так что, если я правильно понимаю, модуль, на котором вы запускаете 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 также анализируется, указывается номер строки, в которой произошла ошибка в этом файле.
Теперь, если вы ищете более надежное решение, потому что это распространенная проблема, с которой вам нужно разобраться, вам придется начинать взламывать внутренности эпидока. Сделав это сам, я бы посоветовал вам не бежать по этой кроличьей норе, если можете. Если вы хотите переключиться на Sphinx, я бы рекомендовал этот маршрут.