Wie behebe ich den Fehler "unerwarteter Einzug" in Python?
python
syntax-error
Macintosh-Fan
quelle
quelle
Antworten:
Python verwendet den Abstand am Zeilenanfang, um zu bestimmen, wann Codeblöcke beginnen und enden. Fehler, die Sie bekommen können, sind:
Unerwarteter Einzug. Diese Codezeile hat am Anfang mehr Leerzeichen als die vorherige, aber die vorherige ist nicht der Anfang eines Unterblocks (z. B. if / while / for-Anweisung). Alle Codezeilen in einem Block müssen mit genau der gleichen Leerzeichenfolge beginnen. Zum Beispiel:
Dieser ist besonders häufig, wenn Sie Python interaktiv ausführen: Stellen Sie sicher, dass Sie vor Ihren Befehlen keine zusätzlichen Leerzeichen einfügen. (Sehr ärgerlich beim Kopieren und Einfügen von Beispielcode!)
Unindent entspricht keiner äußeren Einrückungsstufe. Diese Codezeile hat am Anfang weniger Leerzeichen als die vorherige, entspricht aber auch keinem anderen Block, zu dem sie gehören könnte. Python kann sich nicht entscheiden, wohin es geht. Soll der endgültige Ausdruck beispielsweise im Folgenden Teil der if-Klausel sein oder nicht?
Erwartet einen eingerückten Block. Diese Codezeile hat am Anfang die gleiche Anzahl von Leerzeichen wie die vorherige, aber die letzte Zeile sollte einen Block starten (z. B. if / while / for-Anweisung, Funktionsdefinition).
Wenn Sie eine Funktion wünschen, die nichts tut, verwenden Sie den Befehl "no-op" pass :
Das Mischen von Tabulatoren und Leerzeichen ist zulässig (zumindest in meiner Python-Version), Python geht jedoch davon aus, dass Tabulatoren 8 Zeichen lang sind und möglicherweise nicht mit Ihrem Editor übereinstimmen. Sagen Sie einfach "Nein" zu Tabs. Die meisten Editoren erlauben es, sie automatisch durch Leerzeichen zu ersetzen.
Der beste Weg, um diese Probleme zu vermeiden, besteht darin, beim Einrücken eines Unterblocks immer eine konsistente Anzahl von Leerzeichen zu verwenden und im Idealfall eine gute IDE zu verwenden, die das Problem für Sie löst. Dadurch wird Ihr Code auch besser lesbar.
quelle
except
Teils einertry
Klausel. Der Code sieht richtig aus (da die nicht eingerückte Zeile außerhalb destry
Blocks liegen soll), aber Python meldet dies als "unerwarteten Einzug" -Fehler. Dies wird durch Hinzufügen derexcept
, vielleicht mitpass
(wie hier )In Python ist der Abstand sehr wichtig, dies gibt die Struktur Ihrer Codeblöcke an. Dieser Fehler tritt auf, wenn Sie Ihre Codestruktur durcheinander bringen, zum Beispiel wie folgt:
Möglicherweise enthält Ihre Datei auch eine Mischung aus Tabulatoren und Leerzeichen.
Ich schlage vor, Sie verwenden einen Python-Syntax-fähigen Editor wie PyScripter oder Netbeans
quelle
Führen Sie Ihren Code mit der Option -tt aus, um herauszufinden, ob Sie Tabulatoren und Leerzeichen inkonsistent verwenden
quelle
Aktivieren Sie das sichtbare Leerzeichen in dem von Ihnen verwendeten Editor und aktivieren Sie das Ersetzen von Tabulatoren durch Leerzeichen.
Während Sie Tabs mit Python verwenden können, führt das Mischen von Tabs und Leerzeichen normalerweise zu dem Fehler, der auftritt. Das Ersetzen von Tabulatoren durch 4 Leerzeichen ist der empfohlene Ansatz zum Schreiben von Python-Code.
quelle
Durch korrekte Einrückung. Python ist Whitespace-fähig, daher müssen Sie die Einrückungsrichtlinien für Blöcke befolgen, da sonst Einrückungsfehler auftreten.
quelle
Wenn Sie Python mit Sublime schreiben und Einrückungsfehler erhalten,
Ansicht -> Einrückung -> Einrückung in Leerzeichen umwandeln
Das Problem, das ich beschreibe, wird vom Sublime-Texteditor verursacht. Das gleiche Problem könnte auch von anderen Editoren verursacht werden. Im Wesentlichen hat das Problem damit zu tun, dass Python Einrückungen in Form von Leerzeichen behandeln möchte, während verschiedene Editoren die Einrückungen in Form von Tabulatoren codieren.
quelle
Stellen Sie sicher, dass Sie in Ihrem Editor die Option "Leerzeichen anstelle von Tabulatoren einfügen" verwenden. Anschließend können Sie eine Registerkartenbreite von beispielsweise 4 auswählen. Diese Optionen finden Sie in gedit unter Bearbeiten -> Einstellungen -> Editor.
Fazit: USE SPACES nicht Tabs
quelle
Dieser Fehler kann auch auftreten, wenn etwas in den Python-Interpreter (Terminal / Konsole) eingefügt wird.
Beachten Sie, dass der Interpreter eine leere Zeile als Ende eines Ausdrucks interpretiert. Wenn Sie also etwas wie einfügen
Der Interpreter interpretiert die leere Zeile zuvor
y = 7
als das Ende des Ausdrucks, dh wenn Sie mit der Definition Ihrer Funktion fertig sind, und die nächste Zeiley = 7
hat einen falschen Einzug, da es sich um einen neuen Ausdruck handelt.quelle
Ein Problem, das anscheinend nicht erwähnt wurde, ist, dass dieser Fehler aufgrund eines Problems mit dem Code auftreten kann, das nichts mit Einrückung zu tun hat.
Nehmen Sie zum Beispiel das folgende Skript:
Dies gibt eine zurück,
IndentationError: unexpected unindent
wenn das Problem natürlich eine fehlendeexcept:
Aussage ist.Mein Punkt: Überprüfen Sie den obigen Code, in dem der unerwartete (un) Einzug gemeldet wird!
quelle
Wenn die Einrückung in Ordnung ist, prüfen Sie, ob Ihr Editor über die Option "Leerzeichen anzeigen" verfügt. Wenn Sie dies aktivieren, sollten Sie feststellen können, wo Leerzeichen und Tabulatoren gemischt sind.
quelle
Es gibt einen Trick, der bei mir immer funktioniert hat:
Wenn Sie einen unerwarteten Einzug erhalten haben und feststellen, dass der gesamte Code perfekt eingerückt ist, öffnen Sie ihn mit einem anderen Editor, und Sie werden sehen, welche Codezeile nicht eingerückt ist.
Es ist mir passiert, als ich vim, gedit oder solche Editoren verwendet habe.
Versuchen Sie, nur 1 Editor für Ihren Code zu verwenden.
quelle
Kopieren Sie einfach Ihr Skript und geben Sie unter "" "Ihren gesamten Code" "" ein ...
Geben Sie diese Zeile in einer Variablen an.
Führen Sie diesen Code jetzt im Sublime Editor mit Strg + B aus. Jetzt wird eingerückter Code in der Konsole gedruckt. das ist es
quelle
Sie müssen lediglich Leerzeichen oder Tabulatorzeichen vom Anfang der folgenden Codes entfernen
quelle
Führen Sie den folgenden Befehl aus, um das Problem zu beheben:
Dadurch wird Ihr Code aktualisiert und alle Einrückungsfehler behoben :)
Hoffe das wird sich lösen
quelle
Notepad ++ hat den Tabulatorbereich korrekt angegeben, aber das Einrückungsproblem wurde schließlich im Sublime-Texteditor gefunden.
Verwenden Sie den Sublime-Texteditor und gehen Sie Zeile für Zeile
quelle
Das Einrücken in Python ist wichtig und dient im Gegensatz zu vielen anderen Programmiersprachen nicht der Lesbarkeit des Codes. Wenn zwischen aufeinanderfolgenden Befehlen in Ihrem Code Leerzeichen oder Tabulatoren vorhanden sind, gibt Python diesen Fehler aus, da Python dafür empfindlich ist. Wir werden diesen Fehler wahrscheinlich erhalten, wenn wir Code in ein beliebiges Python kopieren und einfügen. Stellen Sie sicher, dass Sie diese Leerzeichen mit einem Texteditor wie Notepad ++ identifizieren und entfernen, oder entfernen Sie das Leerzeichen manuell aus der Codezeile, in der eine Fehlermeldung angezeigt wird.
Vielen Dank!
quelle