4

如果解释的文件具有不一致的选项卡用法,则可以启动 Python 解释器-tt以引发异常。TabError

我正在尝试为 SVN 编写一个预提交挂钩,以拒绝引发此异常的文件。我可以传递正在提交的文件,python -tt但我的问题是除了被检查之外,该文件也被执行。有没有办法告诉 Python“只分析文件,不要运行它”?或者也许其他一些方法会更好地完成我想要的。

4

2 回答 2

6

您可以使用该py_compile模块执行此操作:

$ python -tt -c "import py_compile; py_compile.compile('test.py', doraise=True)"

doraise=True引发异常并返回一个非零退出代码,您可以在预提交挂钩中轻松测试该代码。

于 2010-02-26T10:57:33.223 回答
2

Python 中首选的制表符用法是完全不使用制表符(使用四个空格进行缩进)。如果那是您的编码风格,那么问题可能会减少到检查代码中是否有任何选项卡。这可以通过简单的正则表达式轻松完成,即使使用 'grep' 也是如此,因此甚至不需要运行解释器。

不过,“py_compile”方式还有其他优势:它还检查 Python 代码语法,这可能是可取的(尽管会消耗 SVN 服务器的一些计算能力)。

于 2010-02-26T11:09:41.020 回答