web-dev-qa-db-de.com

Was tun mit "Unerwarteter Einzug" in Python?

Wie behebe ich den Fehler "Unerwarteter Einzug" in Python?

104
moni

Python verwendet den Abstand am Zeilenanfang, um zu bestimmen, wann Codeblöcke beginnen und enden. Mögliche Fehler sind:

nerwarteter Einzug. Diese Codezeile enthält am Anfang mehr Leerzeichen als die vorherige, aber die vorherige Zeile 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

Dies ist besonders häufig, wenn Sie python interaktiv ausführen: Stellen Sie sicher, dass Sie keine zusätzlichen Leerzeichen vor Ihren Befehlen einfügen. (Sehr ärgerlich, wenn Sie Beispielcode kopieren und einfügen!)

>>>   print "hello"
IndentationError: unexpected indent

nindent entspricht keiner äußeren Einrückungsstufe. Diese Codezeile enthält am Anfang weniger Leerzeichen als die vorherige, entspricht jedoch auch keinem anderen Block, zu dem sie gehören könnte. Python kann 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

Erwartete 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, Funktion) Definition).

>>> 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 Version von Python), aber Python setzt voraus, dass Tabulatoren 8 Zeichen lang sind, was möglicherweise nicht mit Ihrem Editor übereinstimmt. Sagen Sie einfach "Nein".) to tabs. Die meisten Editoren erlauben es, sie automatisch durch Leerzeichen zu ersetzen.

Die beste Möglichkeit, diese Probleme zu vermeiden, besteht darin, beim Einrücken eines Teilblocks immer eine einheitliche Anzahl von Leerzeichen zu verwenden und im Idealfall ein gutes IDE) zu verwenden, das das Problem für Sie löst. Dadurch wird auch Ihr Code erstellt lesbarer.

124
Alice Purcell

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. Beispiel:

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 syntaxbewussten Editor wie PyScripter oder Netbeans

21
yanjost

Führen Sie Ihren Code mit der Option -tt aus, um festzustellen, ob Tabulatoren und Leerzeichen inkonsistent verwendet werden

18
Manoj I

Aktivieren Sie sichtbare Leerzeichen in dem von Ihnen verwendeten Editor und ersetzen Sie Tabulatoren durch Leerzeichen.

Während Sie Tabulatoren mit Python mischen Tabulatoren und Leerzeichen führt in der Regel zu dem Fehler, den Sie haben. Das Ersetzen von Tabulatoren durch 4 Leerzeichen ist die empfohlene Methode zum Schreiben von Python Code.

15
James McMahon

Durch Verwenden der richtigen Einrückung. Python ist whitespace-fähig, daher müssen Sie die Einrückungsrichtlinien für Blöcke befolgen, da sonst Einrückungsfehler auftreten.

8
workmad3

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. Dasselbe Problem könnte auch von anderen Redakteuren verursacht werden. Im Wesentlichen hat das Problem damit zu tun, dass Python=) Einrückungen in Form von Leerzeichen im Vergleich zu verschiedenen Editoren behandelt werden sollen, die die Einrückungen in Form von Tabulatoren codieren.

6
Puneet Lamba

Stellen Sie sicher, dass Sie in Ihrem Editor die Option "Leerzeichen anstelle von Tabulatoren einfügen" verwenden. Dann können Sie wählen, ob Sie eine Registerbreite von beispielsweise 4 wünschen. Sie finden diese Optionen in gedit unter Bearbeiten -> Einstellungen -> Editor.

fazit: Verwenden Sie Leerzeichen, keine Tabulatoren

3
Alex

Dieser Fehler kann auch auftreten, wenn Sie etwas in den Python -Interpreter (Terminal/Konsole) einfügen.

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 vor y = 7 als Ende des Ausdrucks, d. h. dass 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.

3
Zoltán

Wenn der Einzug in Ordnung ist, prüfen Sie, ob Ihr Editor über die Option "Whitespace anzeigen" verfügt. Durch Aktivieren dieser Option sollte es möglich sein, zu ermitteln, wo Leerzeichen und Tabulatoren gemischt sind.

2
Kevan

Ein Problem, das anscheinend nicht erwähnt wurde, ist, dass dieser Fehler aufgrund eines Problems mit dem Code auftreten kann, das nichts mit Einrückungen zu tun hat.

Nehmen Sie zum Beispiel das folgende Skript:

def add_one(x):
    try:
        return x + 1
add_one(5)

Dies gibt einen IndentationError: unexpected unindent Zurück, wenn das Problem natürlich eine fehlende except: - Anweisung ist.

Mein Punkt: Überprüfen Sie den obigen Code, in dem der unerwartete (un) Einzug gemeldet wird!

2
WMoreland

Es gibt einen Trick, der immer für mich funktioniert hat:

Wenn Sie einen unerwarteten Einzug erhalten 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.

2
Jesus Rodriguez

Kopieren Sie einfach Ihr Skript und "" fügen Sie Ihren gesamten Code unter "" ...

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

Notepad ++ gab den Tabulatorplatz korrekt an, aber das Einrückungsproblem wurde schließlich im Sublime-Texteditor gefunden.

Verwenden Sie den Sublime-Texteditor und gehen Sie Zeile für Zeile

1
HimalayanCoder

Alles, was Sie tun müssen, ist, Leerzeichen oder Tabulatoren am Anfang der folgenden Codes zu entfernen

from Django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
1
Sunil Tamang

Einrückung in Python ist im Gegensatz zu vielen anderen Programmiersprachen nicht für die Lesbarkeit des Codes wichtig. Wenn zwischen aufeinanderfolgenden Befehlen Leerzeichen oder Tabulatoren im Code vorhanden sind , python gibt diesen Fehler als Python) an. Es ist wahrscheinlich, dass wir diesen Fehler erhalten, wenn wir Code kopieren und in ein beliebiges Python einfügen. Achten Sie darauf, diese Leerzeichen mit einem Texteditor wie Notepad ++ zu identifizieren und zu entfernen, oder entfernen Sie das Leerzeichen manuell aus der Codezeile, in der ein Fehler auftritt.

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!

0
ashu Kr