2009-01-29 325 views
338

當我編譯下面的Python代碼,我得到IndentationError:取消縮進不匹配任何外部縮進級別

IndentationError: unindent does not match any outer indentation level


import sys 

def Factorial(n): # Return factorial 
    result = 0 
    for i in range (1,n): 
     result = result * i 
    print "factorial is ",result 
    return result 

爲什麼?

+27

如果您不會將'result = 0'更改爲'result = 1',那麼您的階乘將不會是...好...準確:-) – Abgan 2009-01-29 16:45:09

+5

並且可能範圍(1,n + 1)會更好,如果你想在你的計算中包含'n':-) – Abgan 2009-01-29 16:46:17

+0

我的$ 0.02,請嘗試http://sourceforge.net/projects/spe。它是一個非常好的免費的,以python爲中心的開發環境。它幫助我忘記了這個錯誤。 – Perpetualcoder 2009-01-29 17:39:44

回答

408

其他海報可能是正確的......可能有空間與您的標籤混合。嘗試做一個搜索&替換用一些空格替換所有標籤。

嘗試這種情況:

import sys 

def Factorial(n): # return factorial 
    result = 1 
    for i in range (1,n): 
     result = result * i 
    print "factorial is ",result 
    return result 

print Factorial(10) 
+1

是的,我必須真正地在最後兩行的內部循環部分(僅在SO中)。不知道爲什麼...... – cbrulak 2009-01-29 16:40:30

+1

我的第一行,「結果= 0」(這應該是1,謝謝糾正)間隔,而其餘的是標籤,補,不知道蟒是那樣 – cbrulak 2009-01-29 16:44:04

+0

是的,那可以很棘手。我使用emacs來編輯python,並且我已經將它設置爲始終用py文件中的空格替換標籤,所以我沒有這個問題。 Notepad ++也可能有這樣的選項。 – 2009-01-29 16:49:00

6

行:result = result * i應當縮進(它是for循環主體)。

或者 - 具有混合空間和製表符

28

你確定你是不是混合在你的縮進空白製表符和空格? (這會導致該錯誤。)

請注意,建議您不要在Python代碼中使用製表符。請參閱style guide。您應該配置Notepad ++爲製表符插入空格。

13

每當我遇到這個錯誤,這是因爲我在編輯器中混淆了製表符和空格。

110

要輕鬆檢查與選項卡/空格問題,你可以真正做到這一點:

python -m tabnanny yourfile.py 

或者你可以設置你的編輯器正確當然:-)

3

看起來是一個壓痕問題。你不必在Python中匹配大括號,但你必須匹配縮進級別。

防止出現空格/製表符問題的最佳方法是在文本編輯器中顯示不可見的字符。這將爲您提供一種快速預防和/或解決與縮進相關的錯誤的方法。

此外,注入複製粘貼代碼是此類問題的常見來源。

-4

在pep8後建立編輯器後,仍然存在問題。 解決這個問題的好方法是用一個選項卡替換四個空格。實際上python不支持4個空格代替1個選項卡。

7

如果您使用Python的IDLE編輯器,你可以做,因爲它表明類似的錯誤消息之一:

1)選擇全部,例如按Ctrl + A

2)進入格式 - > Untabify地區

3)仔細檢查您的縮進仍然是正確的,保存並重新運行您的程序。

我使用Python 2.5.4

0

這可能是因爲它上面的功能沒有縮進以同樣的方式。 即

class a: 
    def blah: 
     print("Hello world") 
    def blah1: 
     print("Hello world") 
0

這是因爲混合了標籤和空格。 您可以刪除所有空格並用製表符替換它們。

或者, 嘗試寫這樣的:

#!/usr/bin/python -tt 

在代碼的開頭。該行解決了製表符和空格之間的差異。

0
在我的情況

,問題的PyDev的配置基於Eclipse

pydev @ Eclipse

3

如果你用記事本+ +,做一個「替換」以擴大檢索模式下找到\噸,與四個空格代替。

153

重要空間是優選的方法 - 見PEP008 IndentationTabs or Spaces?。 (感謝@Siha這一點。)

對於Sublime Text用戶:

設置Sublime Text使用製表符進行縮進: View - 在>Convert Indentation to Tabs

取消選中Indent Using Spaces選項,以及 - >Indentation上面的同一個子菜單。 這將立即解決此問題。

1

我昨天有同樣的問題,這是縮進錯誤,是使用崇高的文本編輯器。花了我的時間試圖修復它,最後我最終將代碼複製到VI文本編輯器中,並且它工作正常。 ps python太空白,請確保不要混合空格和製表符。

0

如果使用科莫多編輯器,你可以做,因爲它表明類似的錯誤消息之一:

1)選擇全部,例如按Ctrl + A

2)進入代碼 - > Untabify地區

3)仔細檢查您的縮進仍然是正確的,保存並重新運行您的程序。

我使用Python 3.4.2

0

如果您正在使用Python開發崇高的文字,你可以通過使用包蟒蛇避免錯誤。安裝蟒蛇,

  1. open your file in sublime
  2. right click on the open spaces
  3. choose anaconda
  4. click on autoformat
  5. DONE Or Press CTRL+ALT+R.
4

Atom

後去

Packages > Whitespace > Convert Spaces to Tabs 

然後再次檢查文件縮進:

python -m tabnanny yourFile.py 

>python 
>>> help("yourFile.py") 
4

如果您正在使用的Vim,擊中逃跑,然後鍵入

GG = G

這種自動縮進一切,將清理你扔。

2

Atom的用戶的任何空間,Packages ->whitspace -> remove trailing whitespaces 這工作對我來說

1

只是一個補充。 Notepad ++中的兩個縮進都有類似的問題。

  1. 相應穩固的壓痕
  2. 外縮進級別

    轉到---->搜索標籤---->上自來水代替 ---->命中單選按鈕擴展下面--->現在用四個空格替換\ t

    轉到---->搜索標籤---->點擊替換 ---->點擊單選按鈕Extende下面d --->現在什麼也沒有

-2

替換\ n爲偶數我也遇到了同樣的問題,後來我發現,有一個編碼問題。我建議ü太多改變烏爾編輯器。 最好的Python友好的IDE或編輯器是pycharm,sublime,vim for linux。

相關問題