2012-03-15 87 views
3

我看到有类似的标题。但我的情况似乎有点奇怪。我以某种方式使用了PyCharm和Vim的混合(并且在Vim中我有tabstop = 4和shiftwidth = 2),我的Python代码似乎是un-fixabl-y borked,缩进方式。我第一次看到在Vim中一切都是错误的,所以我重新整理了一切。但是当我运行它时,我得到一个错误,即有一个意外的缩进,尽管在Vim中一切看起来完全对齐。下面是一个例子(这是它看起来像在Vim中):Python缩进borked

for f in files: 
    for line in f: 
     items = line.strip().split() 
     items = items[2:] 
     items = ' '.join(items).split(', ') 

当我运行它,我得到:

File "getEsSynonymLSAVectors.py", line 136 
    items = items[2:] 
    ^
IndentationError: unexpected indent 

我用PythonTidy,我用reindent,我试过:retab,我试过手动重新排列 - 没有任何东西可以解决这个问题。任何经验/建议将不胜感激。

+1

你可以上传文件的任何地方,如[要点](http://gist.github.com)或[引擎收录](http://pastebin.com)? – phihag 2012-03-15 11:08:23

+0

您发布的代码(复制粘贴)对我来说没有问题。 – 2012-03-15 11:09:17

+3

在vim中,确保你有'expandtab'设置。另外,用'-tt'运行Python。如果它没有报告错误,那么查看文件的hexdump - 它可能是bugsily处理的Unicode空格或不可见字符。 – 2012-03-15 11:09:52

回答

8

Python的处理制表符作为8位在默认情况下,如果你缩进borked,你通常希望将标签切换到空间(或反之亦然,但我通常发现,空间是比较容易处理)。因此,请确保将vim设置为8个空格宽度(:set ts=8),以查看python看到的内容。

要修复vim中的标签错误,我通常会做以下事情,首先我需要能够看到标签,所以我启用了高亮搜索(:set hlsearch)并搜索标签(/\t)。然后,我会看到需要重新绑定的区域。接下来,我试图找到合适的vim的标签宽度设置为文件(:set ts=n并改变n直到一切正常),使扩展选项卡(:set et),然后运行自动标签固定(:retab)。当所有其他情况都失败时,手动回收。

如果您使用版本控制,确保与文件diff的变化之前和手动检查你没有介绍,因为在缩进级别无意更改的错误。如果您不使用版本控制,请保留备份并在文件上运行差异。

2

尝试类似这样的事情。

首先设置适当的设置。 始终使用4个空格。所以将它改为tabs = 4个空格。

首先将所有空格选项卡。 然后将所有制表符转换为空格。 (我用Geany)

它之前已经多次为我工作。

+0

+1 - 这对我来说已经很有效了_every time_ – Kimvais 2012-03-15 11:39:30