2012-03-15 94 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