Python中出現(xiàn)IndentationError:unindent does not match any outer indentation level錯(cuò)誤的解決方法
【問(wèn)題】
一個(gè)python腳本,本來(lái)都運(yùn)行好好的,然后寫了幾行代碼,而且也都確保每行都對(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) -> 顯示空格與制表符
然后就看出問(wèn)題來(lái)了:
原來(lái)錯(cuò)誤的行數(shù)是1580行:
但是源碼的1580行的對(duì)齊用的是點(diǎn)點(diǎn)點(diǎn)的空格,是和前面的幾行的對(duì)齊所用的箭頭表示的TAB鍵,是不匹配的,即代碼的對(duì)齊,混用了TAB鍵和空格:

而新的Python語(yǔ)法,是不支持的代碼對(duì)齊中,混用TAB和空格的。所以出現(xiàn)上述錯(cuò)誤提示了。
知道原因了,解決起來(lái)就簡(jiǎn)單了:
去把對(duì)應(yīng)的TAB,都改為空格,統(tǒng)一一下對(duì)齊的風(fēng)格,即可。
在Notepad++中,去:
設(shè)置->首選項(xiàng):
語(yǔ)言->以空格取代(TAB鍵):
即可實(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ò)誤:

【解決過(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è)空格,偏偏要寫8個(gè)空格,也會(huì)報(bào)錯(cuò)的。
對(duì)應(yīng)的單行注釋##, 則對(duì)縮進(jìn)沒(méi)有任何要求。
可能是三個(gè)引號(hào)是屬于字符串的原因吧
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
python 實(shí)現(xiàn)返回一個(gè)列表中出現(xiàn)次數(shù)最多的元素方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)返回一個(gè)列表中出現(xiàn)次數(shù)最多的元素方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python Matplotlib數(shù)據(jù)可視化(1):簡(jiǎn)單入門
這篇文章主要介紹了python Matplotlib的相關(guān)資料,幫助大家入門matplotlib,繪制各種圖表,感興趣的朋友可以了解下2020-09-09
python爬取Ajax動(dòng)態(tài)加載網(wǎng)頁(yè)過(guò)程解析
這篇文章主要介紹了python爬取Ajax動(dòng)態(tài)加載網(wǎng)頁(yè)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
python使用hdfs3模塊對(duì)hdfs進(jìn)行操作詳解
這篇文章主要介紹了python使用hdfs3模塊對(duì)hdfs進(jìn)行操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python生成個(gè)性簽名圖片獲取GUI過(guò)程解析
這篇文章主要介紹了Python生成個(gè)性簽名圖片獲取GUI過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
詳解OpenCV中直方圖,掩膜和直方圖均衡化的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了OpenCV中直方圖、掩膜、直方圖均衡化詳細(xì)介紹及代碼的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),需要的可以參考一下2022-11-11
Python TensorFlow介紹與實(shí)戰(zhàn)
這篇文章介紹了Python TensorFlow介紹與實(shí)戰(zhàn),通過(guò)本文的介紹,我們不僅了解了TensorFlow的基本概念和安裝方法,還通過(guò)線性回歸和卷積神經(jīng)網(wǎng)絡(luò)的實(shí)例,深入探討了 TensorFlow 的使用技巧,TensorFlow 的強(qiáng)大功能和靈活性使其成為深度學(xué)習(xí)領(lǐng)域的重要工具,需要的朋友可以參考下2024-07-07
使用Python對(duì)Csv文件操作實(shí)例代碼
這篇文章主要介紹了使用Python對(duì)Csv文件操作實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
Flask 驗(yàn)證碼自動(dòng)生成的實(shí)現(xiàn)示例
本文主要介紹了Flask 驗(yàn)證碼自動(dòng)生成的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03





