Antworten:
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.
Leider ist der alte xkcd-Comic nicht mehr ganz auf dem neuesten Stand.
Seit Python 3.0 müssen Sie schreiben:
print("Hello, World!")
Und jemand muss diese antigravity
Bibliothek noch schreiben :(
Die Syntax wurde von Python 2 zu Python 3 geändert. In Python 2
print "Hello, World!"
funktioniert, aber in Python 3 verwenden Sie Klammern als
print("Hello, World!")
Dies entspricht der Syntax von Scala und Java.
Wenn Ihr Code sowohl in Python 2 als auch in Python 3 funktionieren soll, können Sie dies erreichen, indem Sie dies zu Beginn Ihres Programms laden:
from __future__ import print_function # If code has to work in Python 2 and 3!
Dann können Sie auf Python 3-Weise drucken:
print("python")
Wenn Sie etwas drucken möchten, ohne eine neue Zeile zu erstellen, können Sie dies tun:
for number in range(0, 10):
print(number, end=', ')
Grundsätzlich müssen Sie seit Python 3.x verwenden print
mit Klammern arbeiten.
Python 2.x : drucke "Herr der Ringe"
Python 3.x : print ("Herr der Ringe")
print
eine war Anweisung in 2.x , aber es ist eine Funktion in 3.x . Dafür gibt es eine Reihe guter Gründe.
>>> items = ['foo', 'bar', 'baz'] >>> print(*items, sep='+') foo+bar+baz
Ich könnte auch nur hinzufügen, dass ich alles über die Syntaxänderung zwischen Python2.7
und wusste Python3
und mein Code korrekt geschrieben wurde als print("string")
und sogar
print(f"string")
...
Aber nach einiger Zeit des Debuggens wurde mir klar, dass mein Bash-Skript Python aufrief wie:
python file_name.py
Dies hatte den Effekt, dass mein Python-Skript standardmäßig aufgerufen wurde, python2.7
wodurch der Fehler ausgegeben wurde. Also habe ich mein Bash-Skript geändert in:
python3 file_name.py
Welche von groben verwendet Python3, um das Skript auszuführen, das den Fehler behoben hat.
Außerhalb der direkten Antworten hier sollte man den anderen Hauptunterschied zwischen Python 2 und 3 beachten. Das offizielle Python-Wiki geht auf fast alle Hauptunterschiede ein und konzentriert sich darauf, wann Sie eine der Versionen verwenden sollten. Dieser Blog-Beitrag erklärt auch das aktuelle Python-Universum und das irgendwie ungelöste Rätsel, auf Python 3 umzusteigen.
Soweit ich das beurteilen kann, fangen Sie an, die Python-Sprache zu lernen. Sie sollten die oben genannten Artikel berücksichtigen, bevor Sie die Python 3-Route fortsetzen. Sie müssen nicht nur einen Teil Ihrer Syntax ändern, sondern auch darüber nachdenken, welche Pakete für Sie verfügbar sind (ein Vorteil von Python 2) und mögliche Optimierungen, die in Ihrem Code vorgenommen werden könnten (ein Vorteil von Python 3). .