1. 程式人生 > >【已解決】Python指令碼執行出現語法錯誤:IndentationError: unindent does not match any outer indentation level

【已解決】Python指令碼執行出現語法錯誤:IndentationError: unindent does not match any outer indentation level

創出處:http://www.crifan.com/python_syntax_error_indentationerror/comment-page-1/

【問題】 
一個python指令碼,本來都執行好好的,然後寫了幾行程式碼,而且也都確保每行都對齊了,但是執行的時候,卻出現語法錯誤: 
IndentationError: unindent does not match any outer indentation level

【解決過程】 
1.對於此錯誤,最常見的原因是,的確沒有對齊。但是我根據錯誤提示的行數,去程式碼中看了下,沒啥問題啊。 
都是用TAB鍵,對齊好了的,沒有不對齊的行數啊。 
2.以為是前面的註釋的內容影響後面的語句的語法了,所以把前面的註釋也刪除了。 
結果還是此語法錯誤。 
3.後來折騰了半天,突然想到了,把當前python指令碼的所有字元都顯示出來看看有沒有啥特殊的字元。

當前用的文字編輯器Notepad++,好像有個設定,可以顯示所有的字元的。 
找到了,在: 
檢視 -> 顯示符號 -> 顯示空格與製表符

notepad   顯示空格與製表符

然後就看出問題來了: 
原來錯誤的行數是1580行:

python error line

但是原始碼的1580行的對齊用的是點點點的空格,是和前面的幾行的對齊所用的箭頭表示的TAB鍵,是不匹配的,即程式碼的對齊,混用了TAB鍵和空格:

1580 space and tab mixed
而新的Python語法,是不支援的程式碼對齊中,混用TAB和空格的。所以出現上述錯誤提示了。

知道原因了,解決起來就簡單了: 
去把對應的TAB,都改為空格,統一一下對齊的風格,即可。 
在Notepad++中,去: 
設定->首選項:

設定 首選項

語言->以空格取代(TAB鍵):

語言 以空格取代Tab

如果沒有的話看看其他設定


即可實現,對於以後每次的TAB輸入,都自動轉換為4個空格。

【總結】

Python中遇到IndentationError,以後第一時間就要想到,是不是由於TAB鍵和空格混搭使用了。

估計很多人也都是此類原因導致的。記得統一一下就好。