2017-09-12 1 views
1

Ich habe einen neuen Python-Benutzer mit etwas Code geholfen, und er fragte mich, warum der Python-Interpreter einige Syntaxfehler in der Zeile nach dem eigentlichen Fehler zeigt. Betrachten Sie den folgenden Code ein:Warum zeigt der Python-Interpreter Syntaxfehler in der folgenden Zeile?

x = [1, 2, 3 
print x 

Ein Syntaxfehler wird für die Linie mit print x gezeigt werden, obwohl der Fehler wirklich in der vorhergehenden Zeile ist.

Dies kann sehr verwirrend sein (und Zeitverschwendung) das erste Mal, wenn Sie darauf stoßen, es ist ein sehr häufiges Problem (Suche nach "Python Syntax Fehler" auf Ihrer Lieblings-Suchmaschine), und es scheint wie es würde Es ist schwer zu korrigieren ... warum wurde es nicht repariert? Hat der derzeitige Ansatz einen gewissen Nutzen?

+2

Da der Syntaxfehler _istnist_ in der ersten Zeile. Wenn Sie eine schließende Klammer ']' in Zeile 2 einfügen, ist dies eine gültige Syntax. Es ist also nichts falsch mit Zeile 1. –

+0

Es ist nur ein Syntaxfehler, wenn der Parser auf etwas trifft, das er nicht erwartet hat, wenn das Grammatik-Bit analysiert wird. Es ist also einfacher, es als "das ist, wo es angefangen hat, keinen Sinn zu machen" statt "das ist, wo Sie es korrigieren müssen" ... weil an diesem Punkt - es hat keine Ahnung, was Sie sagen wollen - also hat man nicht viel Ahnung davon, welcher Teil falsch ist ... –

+0

Wäre es nicht sinnvoll, den Fehler in der letzten Zeile mit Listensyntax zu zeigen? Ich bin mir sicher, dass praktisch jeder neue Python-Programmierer damit konfrontiert wird und am Ende Zeit verschwendet und verwirrt bleibt. – PProteus

Antwort

7

Es gilt Python Syntax, um eine Liste über mehrere Zeilen aufgeteilt, like so:

x = [1, 2, 3 
, 4, 5, 6] 
print x 

So beginnt der Interpreter die print... Linie Lesen eine gültige Fortsetzung der Liste erwarten, die es offensichtlich nicht finden kann.

Auch finde ich nicht das schrecklich irreführend. Ich denke, es ist ziemlich einfach herauszufinden, warum Sie den Fehler bekommen.

+1

Also wäre es nicht sinnvoll, den Fehler auf die letzte Zeile mit Listen-Syntax zu setzen? – PProteus

+1

Das hängt davon ab. In deinem Fall vielleicht. Wenn ich möchte, dass meine Liste zwei Zeilen umfasst und ich ein Komma in der zweiten Zeile vergesse, ist der aktuelle Fehler besser. – GolfWolf

+0

Vielleicht wäre ein beschreibender Fehler besser? Etwas wie "Gebrochene Liste bei oder vor dieser Linie!" – PProteus

3
x = [1, 2, 3 
] 
print x 

Gültige Syntax! Da dies möglich ist, befindet sich der Fehler tatsächlich in Zeile 2, wenn die Liste nicht fortgesetzt oder beendet wird.

Verwandte Themen