Wanneer ik een print
statement probeer te gebruiken in Python, geeft het deze foutmelding:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: Missing parentheses in call to 'print'
Wat betekent dat?
Deze foutmelding betekent dat u Python 3 probeert te gebruiken om een voorbeeld te volgen of een programma uit te voeren dat het Python 2 print
statement gebruikt:
print "Hello, World!"
Het bovenstaande statement werkt niet in Python 3. In Python 3 moet je haakjes toevoegen rond de waarde die moet worden afgedrukt:
print("Hello, World!")
"SyntaxError: Missing parentheses in call to 'print' " is een nieuwe foutmelding die in Python 3.4.2 is toegevoegd om gebruikers te helpen die een Python 2 tutorial proberen te volgen terwijl Python 3 draait.
In Python 3 is het afdrukken van waarden veranderd van een afzonderlijk statement naar een gewone functie-aanroep, dus het heeft nu haakjes nodig:
>>> print("Hello, World!")
Hello, World!
In vroegere versies van Python 3, rapporteert de interpreter enkel een algemene syntaxis fout, zonder enige nuttige hints te geven over wat er verkeerd zou kunnen gaan:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Wat betreft waarom print
een gewone functie werd in Python 3, dat had geen betrekking op de basisvorm van het statement, maar meer op hoe je meer ingewikkelde dingen deed, zoals het afdrukken van meerdere items naar stderr met een spatie achteraan in plaats van de regel te beëindigen.
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
Vanaf de Python 3.6.3 release in september 2017 zijn sommige foutmeldingen met betrekking tot de Python 2.x print syntaxis bijgewerkt om hun Python 3.x tegenhangers aan te bevelen:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Aangezien het "Missing parentheses in call to print" geval een compileertijd syntaxisfout is en dus toegang heeft tot de ruwe broncode, is het's in staat om de volledige tekst op de rest van de regel op te nemen in de voorgestelde vervanging. Op dit moment probeert het echter niet de juiste aanhalingstekens rond die uitdrukking te plaatsen (dat is niet onmogelijk, alleen zo ingewikkeld dat het nog niet is gedaan).
De TypeError
die wordt opgewekt voor de rechter verschuivingsoperator is ook aangepast:
>>> 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>)"?
Omdat deze fout wordt opgewekt wanneer de code wordt uitgevoerd, in plaats van wanneer het wordt gecompileerd, heeft het geen toegang tot de ruwe broncode, en gebruikt dus meta-variabelen (<message>
en <output_stream>
) in de voorgestelde vervangende expressie in plaats van wat de gebruiker werkelijk heeft getypt. In tegenstelling tot het geval van de syntaxisfout, is het eenvoudig om aanhalingstekens te plaatsen rond de Python expressie in de aangepaste rechter shift foutmelding.
Er is een verandering in de syntax van Python 2 naar Python 3. In Python 2,
print "Hello, World!"
werken, maar in Python 3, gebruik haakjes als
print("Hello, World!")
Dit is een gelijkwaardige syntaxis als in Scala en in de buurt van Java.