SVN预提交钩子拒绝不一致制表符使用的Python文件

4 投票
2 回答
1324 浏览
提问于 2025-04-15 19:45

你可以用 -tt 这个选项启动 Python 解释器,这样如果你要检查的文件里有不一致的制表符使用,就会抛出一个 TabError 错误。

我想为 SVN 写一个预提交钩子,目的是拒绝那些会引发这个错误的文件。我可以把要提交的文件传给 python -tt 来检查,但我的问题是,这个文件不仅会被检查,还会被执行。有没有办法告诉 Python “只分析这个文件,不要运行它”?或者说,也许有其他更好的方法来实现我想要的效果。

2 个回答

2

在Python中,推荐的缩进方式是不要使用制表符(也就是Tab键),而是用四个空格来进行缩进。如果你是这样写代码的,那么你可以简单地检查一下代码里有没有Tab字符。这可以通过一些简单的正则表达式来完成,甚至用'grep'命令也可以,所以根本不需要运行解释器。

不过,使用'py_compile'的方法还有其他好处:它还会检查Python代码的语法,这样可以确保代码没有错误(虽然这会消耗一些SVN服务器的计算资源)。

6

你可以使用 py_compile 这个模块来实现这个功能:

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

这里的 doraise=True 会让程序在出错时抛出一个异常,并且返回一个非零的退出代码,这样你就可以在你的预提交钩子中轻松测试这个情况。

撰写回答