Wie behebe ich den Fehler "unerwarteter Einzug" in Python?
Wie behebe ich den Fehler "unerwarteter Einzug" in Python?
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:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
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!)
>>> print "hello"
IndentationError: unexpected indent
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?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
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).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Wenn Sie eine Funktion wünschen, die nichts tut, verwenden Sie den Befehl "no-op" pass :
>>> def foo():
... 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.
except
Teils einer try
Klausel. Der Code sieht richtig aus (da die nicht eingerückte Zeile außerhalb des try
Blocks liegen soll), aber Python meldet dies als "unerwarteten Einzug" -Fehler. Dies wird durch Hinzufügen der except
, vielleicht mit pass
(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:
def test_function() :
if 5 > 3 :
print "hello"
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
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.
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.
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
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
def my_function():
x = 3
y = 7
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 Zeile y = 7
hat einen falschen Einzug, da es sich um einen neuen Ausdruck handelt.
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:
def add_one(x):
try:
return x + 1
add_one(5)
Dies gibt eine zurück, IndentationError: unexpected unindent
wenn das Problem natürlich eine fehlende except:
Aussage ist.
Mein Punkt: Überprüfen Sie den obigen Code, in dem der unerwartete (un) Einzug gemeldet wird!
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.
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.
Kopieren Sie einfach Ihr Skript und geben Sie unter "" "Ihren gesamten Code" "" ein ...
Geben Sie diese Zeile in einer Variablen an.
a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..
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
Sie müssen lediglich Leerzeichen oder Tabulatorzeichen vom Anfang der folgenden Codes entfernen
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Führen Sie den folgenden Befehl aus, um das Problem zu beheben:
autopep8 -i <filename>.py
Dadurch wird Ihr Code aktualisiert und alle Einrückungsfehler behoben :)
Hoffe das wird sich lösen
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
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.
Step1 :Gives error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])
Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]
Vielen Dank!