如何从compileall.compile_dir中检测错误?

时间:2009-03-05 16:48:51

标签: python

使用compile_dir编译python文件目录时如何检测错误?

目前我在stderr上获得了一些东西,但无法在我的应用中检测到它。 py_compile.compile()接受'doraise'参数,但这里没有。

或者有更好的方法从python脚本执行此操作吗?

编辑:

我用os.walk修复它并为每个文件调用py_compile.compile。但问题仍然存在。

2 个答案:

答案 0 :(得分:2)

我没有看到更好的方法。该代码旨在支持命令行程序,而API似乎并不完全适合用作库。

如果你真的不得不使用compileall那么你可以用这个hack来伪装它,这注意到在catch异常处理程序中测试了“quiet”是否为boolean-ness。我可以用非零覆盖它,检查异常状态以查看它是否来自py_compile(quiet在其他上下文中测试)并对该信息执行某些操作:

import sys
import py_compile
import compileall

class ReportProblem:
    def __nonzero__(self):
        type, value, traceback = sys.exc_info()
        if type is not None and issubclass(type, py_compile.PyCompileError):
            print "Problem with", repr(value)
            raise type, value, traceback
        return 1
report_problem = ReportProblem()

compileall.compile_dir(".", quiet=report_problem)

Förresten,det finnsGothPypåförstamåndagenvarjemånad,om du skulletasällskapmedandra Python-användareiGbg。

答案 1 :(得分:0)

对我来说很好。可能是因为你没有以某种方式将doraise设置为True吗?