【问题标题】:Enforce "spaces" or "tabs" only in python files?仅在 python 文件中强制执行“空格”或“制表符”?
【发布时间】:2011-01-30 05:55:06
【问题描述】:

在 Python 中,是否有一种方法可以在每个文件的基础上强制使用空格或制表符缩进?

嗯,也许“强制”太强了,更像是“建议”。

我不断收到带有混合缩进的补丁文件,这很烦人......(至少可以说)Python 本身可以判断何时出现问题,但我正在编辑器级别搜索一些东西来做到这一点,就像它存在一样对于字符集。

编辑:好的,我的问题不清楚,我之所以这么问,是因为我不断收到您可以想象的任何选项卡/空格组合中的更正和补丁。我正在使用 Mercurial 作为 DVCS,也许这个级别存在一些东西?

【问题讨论】:

  • 在某处应该有一个钩子,所有传入的文件都通过它运行。您应该在那里添加一个 tabs2spaces 脚本。或者只是与向您发送补丁的人交谈 - 如果主脚本使用空格,那么他们向您发送带有标签的补丁是不正确的。

标签: python tabs indentation spaces


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果您有混合文件,编写自己的脚本将制表符转换为空格并不难

    【讨论】:

    • 问题不是关于如何正确缩进作者正在编写的代码,而是如何修复外部贡献者发送的补丁。此外,当“expand”和“reindent.py”等工具存在时,无需编写脚本。
    【解决方案3】:

    正如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
    

    在编辑级别回答,这取决于编辑,请注明!

    【讨论】:

    • 有一个编辑器指令来设置文件的字符编码,例如“# -- coding: utf-8 --” 将文本保存为utf-8 .也许有类似设置标签宽度的东西?
    【解决方案4】:

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

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

    顺便说一句,如果您使用的是 unix,那么您的系统可能还有expand(和unexpand)命令,它将所有制表符转换为空格(并将空格转换为制表符)。但是,在这种情况下,我认为reindent.py 是正确的工具。

    【讨论】:

    • +1,大爱。顺便说一句,你能推荐 Javascript、HTML、CSS 等类似的东西吗?在语义上并不重要,但在多作者项目中,我发现特殊风格的混合很烦人——而且这些天我主要使用 hg!-)
    • @Alex:哦,我多么想为你提供一些聪明的东西,但是唉,我没有一个好的建议。
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多