461 Stimmen

Was bedeutet "SyntaxError: Fehlende Klammern bei Aufruf von 'print'" in Python?

Wenn ich versuche, ein print-Statement in Python zu verwenden, zeigt es mir diesen Fehler an:

>>> print "Hallo, Welt!"
  File "", line 1
    print "Hallo, Welt!"
                        ^
SyntaxError: Fehlende Klammern beim Aufruf von 'print'

Was bedeutet das?


Siehe <a href="https://stackoverflow.com/questions/2456148/">SyntaxError für print mit Stichwortargument end=' '</a> für das gegenteilige Problem.

Siehe <a href="https://stackoverflow.com/questions/32122868">Python 3 print ohne Klammern</a> für Workarounds und Bestätigung, dass <code>print</code> in Python 3 nicht wie ein Statement funktionieren kann.

685voto

ncoghlan Punkte 37564

Diese Fehlermeldung bedeutet, dass Sie versuchen, Python 3 zu verwenden, um ein Beispiel zu verfolgen oder ein Programm auszuführen, das die Python 2 print Anweisung verwendet:

print "Hallo, Welt!"

Die obige Anweisung funktioniert nicht in Python 3. In Python 3 müssen Sie Klammern um den zu druckenden Wert hinzufügen:

print("Hallo, Welt!")

“SyntaxError: Fehlende Klammern beim Aufruf von 'print'” ist eine neue Fehlermeldung, die in Python 3.4.2 hinzugefügt wurde, hauptsächlich um Benutzern zu helfen, die versuchen, einem Python 2 Tutorial zu folgen, während sie Python 3 ausführen.

In Python 3 ist das Drucken von Werten von einer eigenständigen Anweisung zu einem einfachen Funktionsaufruf gewechselt, daher benötigt es nun Klammern:

>>> print("Hallo, Welt!")
Hallo, Welt!

In früheren Versionen von Python 3 meldet der Interpreter einfach einen allgemeinen Syntaxfehler, ohne Hinweise darauf zu geben, was möglicherweise schief läuft:

>>> print "Hallo, Welt!"
  File "", line 1
    print "Hallo, Welt!"
                        ^
SyntaxError: invalid syntax

Was das Warum betrifft, dass print in Python 3 zu einer gewöhnlichen Funktion wurde, hängt das nicht mit der grundlegenden Form der Anweisung zusammen, sondern damit, wie Sie kompliziertere Dinge wie das Drucken mehrerer Elemente auf stderr mit einem abschließenden Leerzeichen anstelle des Beendens der Zeile gemacht haben.

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, die sich auf die Python 2.x-Drucksyntax beziehen, aktualisiert, um deren entsprechende Python 3.x-Gegenstücke zu empfehlen:

>>> print "Hallo!"
  File "", line 1
    print "Hallo!"
                 ^
SyntaxError: Fehlende Klammern beim Aufruf von 'print'. Meinten Sie print("Hallo!")?

Da der Fall "Fehlende Klammern beim Aufruf von print" ein Kompilierungszeit-Syntaxfehler ist und daher Zugriff auf den Rohcode hat, kann er den vollständigen Text in der restlichen Zeile in den vorgeschlagenen Ersatz einbeziehen. Der Fehler versucht jedoch derzeit nicht, die passenden Anführungszeichen um diesen Ausdruck herum zu platzieren (das ist nicht unmöglich, aber kompliziert genug, dass es nicht gemacht wurde).

Das für den Rechtsshift-Operator ausgelöste TypeError wurde ebenfalls angepasst:

>>> print >> sys.stderr
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Meinten Sie "print(, file=)"?

Da dieser Fehler auftritt, wenn der Code ausgeführt wird und nicht beim Kompilieren, hat er keinen Zugriff auf den Rohcode und verwendet daher Meta-Variablen ( und ) im vorgeschlagenen Ersatzausdruck anstelle dessen, was der Benutzer tatsächlich eingegeben hat. Im Gegensatz zum Fall des Syntaxfehlers ist es einfach, Anführungszeichen um den Python-Ausdruck in der benutzerdefinierten Fehlermeldung für den Rechtsshift zu platzieren.

37voto

Christian Punkte 23651

Leider ist der alte xkcd-Comic nicht mehr ganz aktuell.

https://imgs.xkcd.com/comics/python.png

Seit Python 3.0 musst du folgendes schreiben:

print("Hallo, Welt!")

Und es muss immer noch jemand diese antigravity Bibliothek schreiben :(

26voto

Sagar balai Punkte 439

Es gibt eine Änderung in der Syntax von Python 2 zu Python 3. In Python 2,

print "Hallo, Welt!" 

funktioniert, aber in Python 3 werden Klammern verwendet, wie in

print("Hallo, Welt!")

Dies ist eine äquivalente Syntax zu Scala und nahe an Java.

15voto

Om Sao Punkte 5662

In Python 3.x, print ist jetzt eine Funktion, anstatt eines Statements, wie es in 2.x war.

Daher wird print durch Aufrufen als Funktion verwendet, und daher sind Klammern erforderlich:

Python 2.x: print "Lord of the Rings"

Python 3.x: print("Lord of the Rings")

Es gibt mehrere Vorteile, print zu einer Funktion zu machen:

  • Die print-Funktion bietet mehr Flexibilität beim Drucken mehrerer Werte (die jetzt Argumente für die Funktion sind). Insbesondere ermöglicht sie Argument-Packing:

    items = ['foo', 'bar', 'baz'] print(*items, sep='+') foo+bar+baz

  • Das Verhalten von Aufrufen von print kann einfach durch Schreiben einer neuen Funktion namens print ersetzt werden. Dies wäre mit dem print-Statement unmöglich gewesen.

8voto

Lukasz Punkte 267

Wenn Ihr Code sowohl in Python 2 als auch in 3 funktionieren soll, können Sie dies erreichen, indem Sie dies zu Beginn Ihres Programms laden:

from __future__ import print_function   # Wenn der Code in Python 2 und 3 funktionieren muss!

Dann können Sie auf die 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=', ')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X