Wenn ich den folgenden Python-Code kompiliere, erhalte ich
IndentationError: unindent entspricht keiner äußeren Einrückungsstufe
import sys
def Factorial(n): # Return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
Warum?
python
indentation
cbrulak
quelle
quelle
View > Indentation > Intent Using Spaces
Antworten:
Andere Poster sind wahrscheinlich korrekt. Möglicherweise sind Leerzeichen mit Ihren Registerkarten gemischt. Versuchen Sie, eine Suche durchzuführen und zu ersetzen, um alle Registerkarten durch ein paar Leerzeichen zu ersetzen.
Versuche dies:
quelle
WICHTIG : Leerzeichen sind die bevorzugte Methode - siehe PEP008 Einrückung und Tabulatoren oder Leerzeichen? . (Danke an @Siha dafür.)
Für
Sublime Text
Benutzer:Stellen Sie ein
Sublime Text
, dass Registerkarten zum Einrücken verwendet werden sollen:View
->Indentation
->Convert Indentation to Tabs
Deaktivieren Sie die
Indent Using Spaces
Option auch im selben Untermenü oben. Dadurch wird dieses Problem sofort behoben.quelle
Um auf einfache Weise nach Problemen mit Tabulatoren / Leerzeichen zu suchen, können Sie Folgendes tun:
oder du kannst deinen Editor natürlich einfach richtig einrichten :-)
quelle
Sind Sie sicher, dass Sie keine Tabulatoren und Leerzeichen in Ihrem Einrückungsweißraum mischen? (Das wird diesen Fehler verursachen.)
Beachten Sie, dass im Python-Code keine Registerkarten verwendet werden. Siehe den Styleguide . Sie sollten Notepad ++ so konfigurieren, dass Leerzeichen für Tabulatoren eingefügt werden.
quelle
Immer wenn ich auf diesen Fehler gestoßen bin, habe ich Tabulatoren und Leerzeichen in meinem Editor irgendwie verwechselt.
quelle
Wenn Sie den IDLE-Editor von Python verwenden, können Sie wie in einer ähnlichen Fehlermeldung vorgeschlagen vorgehen:
1) Alle auswählen, zB Ctrl+A
2) Gehen Sie zu Format -> Region aufheben
3) Überprüfen Sie, ob Ihre Einrückung noch korrekt ist, speichern Sie Ihr Programm und führen Sie es erneut aus.
Ich benutze Python 2.5.4
quelle
Wenn Sie Vim verwenden, drücken Sie die Esc-Taste und geben Sie ein
gg = G.
Dieses Auto rückt alles automatisch ein und räumt alle Räume auf, in die Sie geworfen haben.
quelle
Die Zeile:
result = result * i
sollte eingerückt sein (dies ist der Hauptteil der for-Schleife).Oder - Sie haben gemischte Leerzeichen und Tabulatorzeichen
quelle
Auf Atom
gehe zu
Überprüfen Sie dann erneut den Einzug Ihrer Datei:
oder
quelle
Scheint ein Einrückungsproblem zu sein. Sie müssen in Python keine geschweiften Klammern verwenden, aber Sie müssen den Einrückungsstufen entsprechen.
Der beste Weg, um Platz- / Tabulatorprobleme zu vermeiden, besteht darin, unsichtbare Zeichen in Ihrem Texteditor anzuzeigen. Auf diese Weise können Sie Einrückungsfehler schnell verhindern und / oder beheben.
Das Einfügen von kopiertem Code ist eine häufige Ursache für diese Art von Problem.
quelle
Wenn Sie Notepad ++ verwenden, führen Sie ein "Ersetzen" mit erweitertem Suchmodus durch, um \ t zu finden und durch vier Leerzeichen zu ersetzen.
quelle
Für Atom-Benutzer hat
Packages ->whitspace -> remove trailing whitespaces
dies bei mir funktioniertquelle
Nur eine Ergänzung. Ich hatte ein ähnliches Problem mit den beiden Einrückungen in Notepad ++.
Äußere Einrückungsstufe
Gehen Sie zu ----> Registerkarte Suchen ----> tippen Sie auf Ersetzen ----> klicken Sie auf das Optionsfeld Erweitert unten ---> Ersetzen Sie nun \ t durch vier Leerzeichen
Gehen Sie zu ----> Registerkarte Suchen ----> tippen Sie auf Ersetzen ----> klicken Sie auf das Optionsfeld Erweitert unten ---> Ersetzen Sie nun \ n durch nichts
quelle
Ich habe Jupyter Notebook verwendet und fast alle der oben genannten Lösungen (Anpassung an mein Szenario) ohne Verwendung ausprobiert. Ich ging dann Zeile für Zeile, löschte alle Leerzeichen für jede Zeile und ersetzte sie durch Tabulatoren. Das hat das Problem gelöst.
quelle
Für Spyder-Benutzer gehen Sie zu Quelle> Einrückung korrigieren , um das Problem sofort zu beheben
quelle
Dies kann daran liegen, dass die darüber liegende Funktion nicht auf die gleiche Weise eingerückt ist. dh
quelle
Ich hatte gestern das gleiche Problem, es war ein Einrückungsfehler, ich habe einen großartigen Texteditor verwendet. Ich habe stundenlang versucht, das Problem zu beheben, und am Ende habe ich den Code in den VI-Texteditor kopiert, und es hat einwandfrei funktioniert. ps python ist zu weißraumempfindlich. Achten Sie darauf, Leerzeichen und Tabulatoren nicht zu mischen.
quelle
Da ich es realisieren zu keiner Antwort spezifisch ist
spyder
, werde ich ein hinzufügen: Grundsätzlich sorgfältig auf Ihrer aussehenif
Aussage und stellen Sie sicher , dass alleif
,elif
undelse
habe den gleichen Abstand , dass sie am Anfang wie so ist in der gleichen Zeile ist:quelle
Ich hatte eine Funktion definiert, aber sie hatte außer den Funktionskommentaren keinen Inhalt ...
Es schrie:
(Beachten Sie, dass die Linie, auf die die
^
Markierung zeigt, leer ist.)- -
Mehrere Lösungen:
1: Kommentieren Sie einfach die Funktion aus
2: Funktionskommentar hinzufügen
3: Fügen Sie eine Zeile hinzu, die nichts bewirkt
Stellen Sie in jedem Fall sicher, dass klar ist, warum es sich um eine leere Funktion handelt - für Sie selbst oder für Ihre Kollegen, die Ihren Code verwenden
quelle
Um Sie daran zu erinnern, dass ein logischer Fehler vorliegt, sollten Sie Ergebnis = 1 beibehalten. Andernfalls wird Ihre Ausgabe auch nach Ausführung der Schleife als Ergebnis = 0 angezeigt.
Zweitens können Sie es so schreiben:
Wenn Sie eine Zeile verlassen, wird der Python-Shell mitgeteilt, dass die FOR-Anweisungen beendet wurden. Wenn Sie Erfahrung mit der Python-Shell haben, können Sie verstehen, warum wir eine Zeile hinterlassen müssen.
quelle
Für was es wert ist, wurde mein Docstring zu stark eingerückt und dies wirft auch den gleichen Fehler
IndentationError: unindent does not match any outer indentation level
quelle
Dies liegt daran, dass sowohl Tabulatoren als auch Leerzeichen verwechselt werden. Sie können entweder alle Leerzeichen entfernen und durch Tabulatoren ersetzen.
Oder versuchen Sie Folgendes zu schreiben:
am Anfang des Codes. Diese Zeile löst alle Unterschiede zwischen Tabulatoren und Leerzeichen auf.
quelle
In meinem Fall war das Problem die Konfiguration von Pydev auf Eclipse
quelle
Wenn Sie den Komodo-Editor verwenden, können Sie das tun, was in einer ähnlichen Fehlermeldung vorgeschlagen wird:
1) Wählen Sie alle aus, z. B. Strg + A.
2) Gehen Sie zu Code -> Region aufheben
3) Überprüfen Sie, ob Ihre Einrückung noch korrekt ist, speichern Sie Ihr Programm und führen Sie es erneut aus.
Ich benutze Python 3.4.2
quelle
Wenn Sie Sublime-Text für die Python-Entwicklung verwenden, können Sie den Fehler vermeiden, indem Sie das Paket Anaconda verwenden. Nach der Installation von Anaconda
quelle
In Intellij mit dem Python-Plugin wurde das Problem mit Einzug / Tabulator / Leerzeichen durch Strg + Umschalt + Alt zum Neuformatieren des Dokuments behoben
quelle
Für SPYDER- Benutzer: Ich verwende Spyder 3.3.2 mit Python 3.7.1 und habe dieses Problem gelöst, indem ich den Einzug so eingestellt habe, dass Registerkarten verwendet werden. Klicken Sie mit den folgenden Schritten auf:
Dann habe ich die "nicht identifizierte" Zeile mit der Tabulatortaste zurückgesetzt.
Aus irgendeinem Grund bekam ich ohne diese Einstellung manchmal den Ghost IndentationError.
quelle
Zum Beispiel:
In diesem Code trat die gleiche Situation für mich auf. Löschen Sie einfach die vorherigen Einrückungsfelder in Zeile 2 und 3 und verwenden Sie dann entweder die Registerkarte oder das Leerzeichen. Verwenden Sie niemals beide . Geben Sie beim Schreiben von Code in Python den richtigen Einzug. Für Spyder gehe zu Quelle> Einrückung korrigieren. Gleiches gilt für VC-Code und erhabenen Text oder einen anderen Editor. Korrigieren Sie die Einrückung.
quelle
Dies geschieht hauptsächlich aufgrund des Editors. Versuchen Sie, Tabulatoren in Leerzeichen zu ändern (4). Die beste pythonfreundliche IDE oder die besten Editoren sind pycharm, sublime, vim für Linux.
Auch ich hatte das gleiche Problem, später stellte ich fest, dass es ein Codierungsproblem gibt. Ich schlage vor, Sie ändern auch Ihren Editor.
quelle