Python中出現IndentationError:unindent does not match any outer indentation level錯誤的解決方法

来源:https://www.cnblogs.com/zxc2man/archive/2023/02/24/17151336.html
-Advertisement-
Play Games

PHP使用ZipArchive批量打包壓縮文件,並下載。使用php自帶的ZipArchive類,可以壓縮或解壓文件。 首先需要確定已經安裝了zip擴展,如果沒有安裝,請先安裝,下載:http://pecl.php.net/package/zip (相應php版本的zip包) 先把需要下載的文件路徑找 ...


【問題】 
一個python腳本,本來都運行好好的,然後寫了幾行代碼,而且也都確保每行都對齊了,但是運行的時候,卻出現語法錯誤: 

IndentationError: unindent does not match any outer indentation level

【解決過程】 

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

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

 

 

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

 

 

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

而新的Python語法,是不支持的代碼對齊中,混用TAB和空格的。所以出現上述錯誤提示了。

知道原因了,解決起來就簡單了: 
去把對應的TAB,都改為空格,統一一下對齊的風格,即可。 

在Notepad++中,去: 

設置->首選項:

 

 

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

 

 

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

【總結】

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

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

下麵是其他網友的補充

今天在網上copy的一段代碼,代碼很簡單,每行看起來該縮進的都縮進了,運行的時候出現瞭如下錯誤: 

 

 

【解決過程】 

1.對於此錯誤,最常見的原因是,的確沒有縮進。根據錯誤提示的行數,去代碼中看了下,看起來沒有什麼問題呀,都有縮進,而且語法也沒有錯誤呀。

2.仔細研究了下代碼,發現真的看不出什麼問題,突然想到了,把當前python腳本的所有字元(包括空格和tab字元)都顯示出來看看到底有沒有縮進或者是其他特殊的字元。

當前用的文本編輯器Notepad++,有個設置,可以顯示所有的字元的。

在: 

視圖 –> 顯示符號 –> 顯示空格與製表符 

這樣就可以看到我們Python代碼的到底有沒有該縮進的都縮進了。

最終發現代碼報錯原因還真是出在這裡,錯誤提示的這行看起來是縮進了,實際上確沒有縮進,這就是問題的根源所在。

發現了個問題,發現copy過來的Python代碼都沒有進行縮進,當我們copy別人的代碼時,縮進這點需要額外註意。不要看起來代碼縮進了就感覺ok了,實際上是沒有縮進的。

總結

使用(多行註釋)三個引號的註釋, 一定要註意縮進要與上下文保持一致

即同層次代碼是幾個縮進,就幾個縮進。

報上面這個錯誤的原因是自己在註釋'''test'''前面只有三個空格導致。

同層代碼是4個空格,偏偏要寫8個空格,也會報錯的。 

對應的單行註釋##, 則對縮進沒有任何要求。

可能是三個引號是屬於字元串的原因吧
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想瞭解更多相關內容請查看下麵相關鏈接


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 不知道現在還有多少人玩知某乎,我們那時候沒事就刷刷知某乎,貼某吧,不知留下了多少足跡。 知乎上問答的質量挺高,今天咱們就對其問答內容進行爬蟲實驗。 效果展示 可以看到,數據咱們就獲取下來了,保存就可以了。 代碼展示 import requests import re import json impo ...
  • Ansible-playbook 快速入門到放棄 隔岸紅塵忙似火,當軒青嶂冷如冰。 1-簡介 playbook 相當於可以把模塊命令都寫入到配置文件裡面,這樣就可以直接執行配置文件了,類似腳本。 2-playbook 初體驗 編寫test.yml 文件,在serviceA 主機機器上的/opt/tj ...
  • 字元串 字元集用來做什麼 字元集是為每個字元分配一個唯一的ID 在同一個字元集內,字元的ID是唯一的,不同字元集ID可能是不同的 UTF-8是編碼規則或者說是Unicode的一種實現 UTF-8將Unicode中的字元ID以某種方式進行編碼 變長的編碼規則: 1-4位元組,具體規則: 0xxxx表示0 ...
  • OpenAI註冊(使用代理vpn才行) 準備: 外國郵箱,如gmail、outlook、iCloud郵箱等 外國手機號,或者能接受外國手機驗證碼既可以 (沒有的話文章里有推薦) 1.註冊我們的OpenAI賬號, 訪問地址:https://platform.openai.com/signup 點擊si ...
  • 分散式存儲系統將用戶存儲的數據根據某種規則存儲到不同機器上,當用戶想要獲取指定數據時,再按照規則到存儲數據的機器中獲取。數據生產者/消費者、數據索引和數據存儲是分散式存儲系統的三大要素。 ...
  • 教程簡介 MicroStrategy初學者教程 - 從簡單和簡單的步驟學習MicroStrategy,從基本到高級概念,包括概述,環境設置,桌面,架構,組件概述,導入數據,OLAP服務,配置對象,公共對象,模式對象,報告對象,報表類型,切片,切塊,透視,鑽取和向下鑽取,彙總,創建度量標準,嵌套度量標 ...
  • QT連接MySQL失敗(本人QT版本:5.12.5) 一、報錯結果 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 二、報錯原因 缺少M ...
  • 簡介 volatile是Java提供的一種輕量級的同步機制。Java 語言包含兩種內在的同步機制:同步塊(或方法)和 volatile 變數,相比於synchronized(synchronized通常稱為重量級鎖),volatile更輕量級,因為它不會引起線程上下文的切換和調度。但是volatil ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...