Diese Fehlermeldung bedeutet, dass Sie versuchen, Python 3 zu verwenden, um einem Beispiel zu folgen oder ein Programm auszuführen, das die Python 2- print
Anweisung verwendet:
print "Hello, World!"
Die obige Anweisung funktioniert in Python 3 nicht. In Python 3 müssen Sie den zu druckenden Wert in Klammern setzen:
print("Hello, World!")
"SyntaxError: Fehlende Klammern beim Aufruf von 'print'" ist eine neue Fehlermeldung, die in Python 3.4.2 hinzugefügt wurde, um Benutzern zu helfen, die versuchen, einem Python 2-Lernprogramm zu folgen, während sie Python 3 ausführen.
In Python 3 wurden die Druckwerte von einer eindeutigen Anweisung zu einem normalen Funktionsaufruf geändert, sodass jetzt Klammern erforderlich sind:
>>> print("Hello, World!")
Hello, World!
In früheren Versionen von Python 3 meldet der Interpreter lediglich einen generischen Syntaxfehler, ohne nützliche Hinweise darauf zu geben, was möglicherweise schief geht:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Der Grund, warum dies print
in Python 3 zu einer gewöhnlichen Funktion wurde, bezog sich nicht auf die Grundform der Anweisung, sondern darauf, wie Sie kompliziertere Dinge wie das Drucken mehrerer Elemente auf stderr mit einem nachgestellten Leerzeichen erledigten, anstatt die Zeile zu beenden.
In Python 2:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
In Python 3:
>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6
Ab der Veröffentlichung von Python 3.6.3 im September 2017 wurden einige Fehlermeldungen im Zusammenhang mit der Python 2.x-Drucksyntax aktualisiert, um ihre Python 3.x-Gegenstücke zu empfehlen:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Da es sich bei dem Fall "Fehlende Klammern im Aufruf zum Drucken" um einen Syntaxfehler bei der Kompilierung handelt und daher Zugriff auf den Rohquellcode hat, kann der vollständige Text im Rest der Zeile in den vorgeschlagenen Ersatz aufgenommen werden. Derzeit wird jedoch nicht versucht, die entsprechenden Anführungszeichen für diesen Ausdruck zu finden (dies ist nicht unmöglich, nur so kompliziert, dass dies nicht geschehen ist).
Die TypeError
für den rechten Schichtfahrer erhöhte wurde ebenfalls angepasst:
>>> print >> sys.stderr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(<message>, file=<output_stream>)"?
Da dieser Fehler beim Ausführen des Codes und nicht beim Kompilieren ausgelöst wird, hat er keinen Zugriff auf den Rohquellcode und verwendet daher Metavariablen ( <message>
und <output_stream>
) im vorgeschlagenen Ersetzungsausdruck anstelle dessen, was der Benutzer tatsächlich eingegeben hat . Im Gegensatz zum Syntaxfehlerfall ist es einfach, in der benutzerdefinierten Fehlermeldung für die Rechtsverschiebung Anführungszeichen um den Python-Ausdruck zu setzen.