如何在加载代码时从epydoc获取堆栈跟踪?

时间:2010-01-22 23:29:08

标签: python 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

产生不太有用的:

    +--------------------------------------
    | In /home/ross/foo.py:
    | Import failed (but source code parsing was successful).
    |     Error: KeyError: 'DOES_NOT_EXIST' (line 1)
我希望epydoc告诉我,失败发生在bar.py的第6行。我不希望它抱怨foo.py导入bar.py。我无法在一个小例子中重现我的特定问题,但我的基本要求是,当epydoc失败时,我希望它打印堆栈跟踪以指出问题。无论是加载子模块还是调用未在字典中查找密钥。

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

1 个答案:

答案 0 :(得分: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 是一个选项,我建议这条路线。