python的空白问题

时间:2013-01-30 13:05:27

标签: python whitespace komodo

我目前正在Windows 7中使用Komodo Edit,但是,我在使用TextWrangler的Mac上遇到过这个问题。无论出于何种原因,当我用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上都经历过两个不同的编辑器,我想知道是否有一些我不知道的设置,或者我是否做错了。

3 个答案:

答案 0 :(得分:7)

当我将代码复制到文件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程序员使用空格而不是制表符来缩进。您在Web上找到的大多数Python代码都将使用空格而不是标签。

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

最简单的方法是采用flow并采用space-as-indentation约定,这样你就不必重新格式化其他人的代码了。

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

答案 1 :(得分: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)reindent.py中的C:\Python2x\Tools\Scripts\脚本可以帮助您正确重新录制文件

-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.

我希望它有所帮助

答案 2 :(得分:1)

由于没有其他人提到它,因此有一种简单的方法可以在Komodo本身内部显示空白。您不需要使用任何外部工具。

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

当您在“查看”菜单上时,请查看其中一些其他有用的功能。我发现缩进指南特别有用,让它们一直打开。查看EOL Markers也不时有用。