1

当我加载我的代码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 告诉我失败发生在bar.py. 我不希望它抱怨foo.py. bar.py我无法在一个小示例中重现我的具体问题,但我的基本要求是,当 epydoc 失败时,我希望它打印堆栈跟踪以指向问题。无论是加载子模块还是调用在字典中找不到键。

注意:这个问题的根源是我试图记录的代码是 SCons 的输入,它有不同的环境设置问题。这就是为什么当我在其中运行时epydoc它不起作用,但在运行时脚本仍然有效scons -f SConstruct.py。我也在尝试使用sphinx. 当我使用它运行时,sphinx它实际上显示了堆栈跟踪。也许我会和sphinx...

4

1 回答 1

2

因此,如果我理解正确,您正在运行 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是一种选择,我会推荐这条路线。

于 2010-01-23T01:08:59.573 回答