仅在python文件中强制使用“空格”或“制表符”?

时间:2010-03-22 08:04:27

标签: python tabs indentation spaces

在Python中,是否有意图在每个文件的基础上强制使用空格或制表符缩进?

嗯,也许“强制执行”太强大了,更像是“推荐”。

我一直收到带有混合缩进的补丁文件,这很烦人......(至少可以说)Python本身可以判断什么时候出现问题,但是我正在搜索某些东西,在编辑器级别这样做,就像它存在一样为了charset。

编辑:好的,我的问题不明确,我问这个是因为我在你可以想象的任何标签/空间混合中不断收到更正和补丁。我使用Mercurial作为DVCS,也许这个级别存在什么东西?

4 个答案:

答案 0 :(得分:10)

Tim Peters编写了一个名为reindent.py的漂亮脚本,它将.py文件转换为使用4空格缩进而没有标签。它可用here,但请先检查您的发行版 - 它可能已捆绑在示例或工具目录中。 (在最新的LTS Ubuntu上,它由python2.7-examples包提供。)

如果您可以设置Mercurial挂钩,则应该能够通过reindent.py运行所有文件。

顺便说一下,如果你使用的是unix,那么你的系统也可能有expand(和unexpand)命令,它将所有选项卡转换为空格(以及空格到选项卡)。但是,在这种情况下,我认为reindent.py是正确的工具。

答案 1 :(得分:5)

查看tabnanny模块: - 检测模糊缩进。

答案 2 :(得分:2)

这是您的编辑应该为您做的事情。大多数编辑器(例如,尝试使用Notepad ++,它是免费的)将允许您设置击中标签是否输入制表符或多个空格。我建议在所有文件中使用两个空格而不是tab(我发现4太多了)。使用空格而不是制表符更好,因为这意味着您可以使用空格和空格来缩进内容。标签键,无需担心弄乱文件。

如果您有混合文件,那么编写自己的脚本以将标签转换为空格并不困难

答案 3 :(得分:2)

PEP 8中所述,请勿混合制表符和空格。但是,两者都可以运行... 正如它所说:

The most popular way of indenting Python is with spaces only.  The
second-most popular way is with tabs only.  Code indented with a mixture
of tabs and spaces should be converted to using spaces exclusively.
When invoking the Python command line interpreter with the -t option, it issues
warnings about code that illegally mixes tabs and spaces.  When using -tt
these warnings become errors.  These options are highly recommended!

因此,解决方案默认使用:

python -t my_mixed_code.py

要在编辑层面回答,这取决于编辑,请注明!