溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦

發(fā)布時(shí)間:2020-08-03 09:13:31 來(lái)源:億速云 閱讀:149 作者:小豬 欄目:開(kāi)發(fā)技術(shù)

小編這次要給大家分享的是Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

【問(wèn)題】 
一個(gè)python腳本,本來(lái)都運(yùn)行好好的,然后寫(xiě)了幾行代碼,而且也都確保每行都對(duì)齊了,但是運(yùn)行的時(shí)候,卻出現(xiàn)語(yǔ)法錯(cuò)誤: 

IndentationError: unindent does not match any outer indentation level

【解決過(guò)程】 

1.對(duì)于此錯(cuò)誤,最常見(jiàn)的原因是,的確沒(méi)有對(duì)齊。但是我根據(jù)錯(cuò)誤提示的行數(shù),去代碼中看了下,沒(méi)啥問(wèn)題啊。 
都是用TAB鍵,對(duì)齊好了的,沒(méi)有不對(duì)齊的行數(shù)啊。 
2.以為是前面的注釋的內(nèi)容影響后面的語(yǔ)句的語(yǔ)法了,所以把前面的注釋也刪除了。 
結(jié)果還是此語(yǔ)法錯(cuò)誤。 
3.后來(lái)折騰了半天,突然想到了,把當(dāng)前python腳本的所有字符都顯示出來(lái)看看有沒(méi)有啥特殊的字符。

當(dāng)前用的文本編輯器Notepad++,好像有個(gè)設(shè)置,可以顯示所有的字符的。 
找到了,在: 
視圖 -> 顯示符號(hào) -> 顯示空格與制表符

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦

然后就看出問(wèn)題來(lái)了: 
原來(lái)錯(cuò)誤的行數(shù)是1580行:

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦

但是源碼的1580行的對(duì)齊用的是點(diǎn)點(diǎn)點(diǎn)的空格,是和前面的幾行的對(duì)齊所用的箭頭表示的TAB鍵,是不匹配的,即代碼的對(duì)齊,混用了TAB鍵和空格:

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦
而新的Python語(yǔ)法,是不支持的代碼對(duì)齊中,混用TAB和空格的。所以出現(xiàn)上述錯(cuò)誤提示了。

知道原因了,解決起來(lái)就簡(jiǎn)單了: 
去把對(duì)應(yīng)的TAB,都改為空格,統(tǒng)一一下對(duì)齊的風(fēng)格,即可。 

在Notepad++中,去: 

設(shè)置->首選項(xiàng):

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦

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

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦

即可實(shí)現(xiàn),對(duì)于以后每次的TAB輸入,都自動(dòng)轉(zhuǎn)換為4個(gè)空格。

【總結(jié)】

Python中遇到IndentationError,以后第一時(shí)間就要想到,是不是由于TAB鍵和空格混搭使用了。

估計(jì)很多人也都是此類原因?qū)е碌?。記得統(tǒng)一一下就好。

下面是其他網(wǎng)友的補(bǔ)充

今天在網(wǎng)上copy的一段代碼,代碼很簡(jiǎn)單,每行看起來(lái)該縮進(jìn)的都縮進(jìn)了,運(yùn)行的時(shí)候出現(xiàn)了如下錯(cuò)誤: 

Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦

【解決過(guò)程】 

1.對(duì)于此錯(cuò)誤,最常見(jiàn)的原因是,的確沒(méi)有縮進(jìn)。根據(jù)錯(cuò)誤提示的行數(shù),去代碼中看了下,看起來(lái)沒(méi)有什么問(wèn)題呀,都有縮進(jìn),而且語(yǔ)法也沒(méi)有錯(cuò)誤呀。

2.仔細(xì)研究了下代碼,發(fā)現(xiàn)真的看不出什么問(wèn)題,突然想到了,把當(dāng)前python腳本的所有字符(包括空格和tab字符)都顯示出來(lái)看看到底有沒(méi)有縮進(jìn)或者是其他特殊的字符。

當(dāng)前用的文本編輯器Notepad++,有個(gè)設(shè)置,可以顯示所有的字符的。

在: 

視圖 –> 顯示符號(hào) –> 顯示空格與制表符 

這樣就可以看到我們Python代碼的到底有沒(méi)有該縮進(jìn)的都縮進(jìn)了。

最終發(fā)現(xiàn)代碼報(bào)錯(cuò)原因還真是出在這里,錯(cuò)誤提示的這行看起來(lái)是縮進(jìn)了,實(shí)際上確沒(méi)有縮進(jìn),這就是問(wèn)題的根源所在。

發(fā)現(xiàn)了個(gè)問(wèn)題,發(fā)現(xiàn)copy過(guò)來(lái)的Python代碼都沒(méi)有進(jìn)行縮進(jìn),當(dāng)我們copy別人的代碼時(shí),縮進(jìn)這點(diǎn)需要額外注意。不要看起來(lái)代碼縮進(jìn)了就感覺(jué)ok了,實(shí)際上是沒(méi)有縮進(jìn)的。

總結(jié)

使用(多行注釋)三個(gè)引號(hào)的注釋, 一定要注意縮進(jìn)要與上下文保持一致

即同層次代碼是幾個(gè)縮進(jìn),就幾個(gè)縮進(jìn)。

報(bào)上面這個(gè)錯(cuò)誤的原因是自己在注釋'''test'''前面只有三個(gè)空格導(dǎo)致。

同層代碼是4個(gè)空格,偏偏要寫(xiě)8個(gè)空格,也會(huì)報(bào)錯(cuò)的。 

對(duì)應(yīng)的單行注釋##, 則對(duì)縮進(jìn)沒(méi)有任何要求。

可能是三個(gè)引號(hào)是屬于字符串的原因

看完這篇關(guān)于Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤怎么辦的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話,可以把它分享出去給更多人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI