当我将代码加载到epydoc并仅加载顶部模块时,它失败并显示:

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


它所引用的NoneType是我尝试在第9行加载的子模块。我如何获得epydoc解释为什么它不能在第9行加载该模块,而不仅仅是向前犁并碰到一个错误?

根据nosko的要求。这是类似的示例,其中没有给出堆栈跟踪:

# 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中:
    |导入失败(但是源代码解析成功)。
    |错误:键错误:“ DOES_NOT_EXIST”(第1行)

我希望epydoc告诉我失败是在bar.py的第6行上。我不想让它抱怨foo.py导入的bar.py。我无法在一个小示例中重现我的特定问题,但是我的基本要求是,当epydoc失败时,我希望它打印一个堆栈跟踪以指出问题。无论是加载子模块还是调用未在字典中找到键。

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

最佳答案

因此,如果我理解正确,您正在运行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内部。我本人已这样做,因此建议您尽量避免掉进这个兔子洞。如果可以选择切换到狮身人面像,则建议使用此路线。

关于python - 如何在epydoc加载代码时从epydoc获取堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2121268/

10-16 03:02