【问题标题】:Whitespace problems with pythonpython的空格问题
【发布时间】:2025-12-31 14:40:11
【问题描述】:

我目前在 Windows 7 中使用 Komodo Edit,但是,我在 Mac 上使用 TextWrangler 时遇到了这个问题。无论出于何种原因,我都会遇到某种空白错误,这在我用 Python 编写时是个大问题。例如,所有内容似乎都已正确标记,但 Komodo 目前给我一个“不明确的空白”错误

//How it appears in my editor
def SaveList(self, directory):
    templist = []
    templistbox2 = []
    for n,i in enumerate(self.listbox2.get(0,END)): 
       templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i)))
    for filename in sorted(os.listdir(directory)):
        self.templist.insert(i, filename)
        print filename #whitespace error here

考虑到我在 windows 和 Mac 上使用两个不同的编辑器都经历过这种情况,我想知道是否有一些我不知道的设置,或者我做错了什么。

【问题讨论】:

  • 你能在缩进中有标签吗?也许您想要的设置是将制表符转换为空格。

标签: python whitespace komodo


【解决方案1】:

当我将您的代码复制到文件中时,test.py 并运行

cat -A test.py

我明白了

//How it appears in my editor$
def SaveList(self, directory):$
    templist = []$
    templistbox2 = []$
    for n,i in enumerate(self.listbox2.get(0,END)): $
       templistbox2.insert(n, re.sub(r'^[0-9]*[.]',"",str(i)))$
    for filename in sorted(os.listdir(directory)):$
        self.templist.insert(i, filename)$
^I    print filename #whitespace error here$

表示最后一行有一个制表符(由^I 表示)后跟四个空格。

我不确定 Windows 上的等效工具是什么,但 Mac 应该有 cat -A 命令。它将显示制表符与空格的位置。


有一个名为reindent.py 的程序会为您将制表符转换为空格:

reindent.py test.py

在 Unix 上还有一个 unexpand 命令将空格转换为制表符。


大多数 Python 程序员使用空格而不是制表符进行缩进。您在网上找到的大多数 Python 代码都使用空格而不是制表符。

您的编辑器可能正在添加制表符,但如果您从网上获取了一段代码,您的文件现在可能同时包含制表符和空格。

顺其自然并采用空格作为缩进的约定是最容易的,因此您不必重新格式化其他人的代码。

顺便说一句,采用空格作为缩进的约定并不意味着每个缩进级别必须按 SPACE 4 次。您的编辑器应该有一个配置选项,可以让按 TAB 插入 4 个空格。

【讨论】:

  • +1 很明显,制表符必须与空格混合,但向 OP 展示如何找到它们是一个不错的奖励!
  • 感谢您的帮助,我会试一试。编辑 - 这很奇怪。我删除了出现错误的选项卡,然后按了 4 次空格,它就消失了。因此,制表符导致错误,但 4 个空格没有。我很困惑,它们不应该是完全相同的间距吗?
  • @user1104854:它们在编辑器上看起来相同,该编辑器将一个 TAB 格式化为 4 个空格,但并非所有编辑器都相同。 Python 不假定制表符和空格之间有任何关系,因此它不知道缩进级别 1 制表符和 4 个空格应该是什么意思。在 Python 中,规则是从不混合制表符和空格来缩进。
【解决方案2】:

这是 Python 中的常见问题。以下建议可能对您有所帮助:

1) 切勿混用空格和制表符。对于新项目,使用空格而不是制表符 请参阅PEP8 我的建议是使用 4 个空格。

2) 更改 Komodo 中制表符长度的默认值,以便更轻松地检测混合。按Edit > Preferences菜单,然后在Editor settings

  • 取消选中,Prefer Tab characters over spaces
  • 使用 4 表示 Number of spaces for indent
  • width of each tab character 使用不同的值(例如8)

3) C:\Python2x\Tools\Scripts\ 中的reindent.py 脚​​本可以帮助您正确地重新缩进文件

-d (--dryrun)   Dry run.   Analyze, but don't make any changes to, files.
-r (--recurse)  Recurse.   Search for all .py files in subdirectories too.
-n (--nobackup) No backup. Does not make a ".bak" file before reindenting.
-v (--verbose)  Verbose.   Print informative msgs; else no output.
-h (--help)     Help.      Print this usage information and exit.

Change Python (.py) files to use 4-space indents and no hard tab characters.
Also trim excess spaces and tabs from ends of lines, and remove empty lines
at the end of files.  Also ensure the last line ends with a newline.

希望对你有帮助

【讨论】:

    【解决方案3】:

    由于没有其他人提到它,有一种简单的方法可以让 Komodo 本身内部的空白可见。您无需使用任何外部工具。

    只需从菜单中选择查看/查看空白,或在 Windows 上使用键盘快捷键 Ctrl+Shift+8。重复以将其关闭。

    当您在“查看”菜单上时,请查看那里的其他一些有用功能。我发现缩进指南特别有用,并且一直打开它们。查看 EOL 标记有时也很有用。

    【讨论】: