ข้อความแสดงข้อผิดพลาดนี้หมายความว่าคุณกำลังพยายามใช้ Python 3 เพื่อทำตามตัวอย่างหรือเรียกใช้โปรแกรมที่ใช้print
คำสั่งPython 2 :
print "Hello, World!"
ข้อความข้างต้นไม่สามารถใช้งานได้ใน Python 3 ใน Python 3 คุณจะต้องเพิ่มวงเล็บรอบค่าที่จะพิมพ์:
print("Hello, World!")
“ SyntaxError: การขาดเครื่องหมายวงเล็บในการเรียกไปที่ 'print'”เป็นข้อความแสดงข้อผิดพลาดใหม่ที่ถูกเพิ่มใน Python 3.4.2 เป็นหลักเพื่อช่วยผู้ใช้ที่พยายามติดตาม Python 2 ในขณะที่ใช้งาน Python 3
ใน Python 3 การพิมพ์ค่าเปลี่ยนจากการเป็นคำสั่งที่แตกต่างกันเพื่อการเรียกใช้ฟังก์ชั่นสามัญดังนั้นตอนนี้มันต้องการวงเล็บ:
>>> print("Hello, World!")
Hello, World!
ใน Python 3 รุ่นก่อนหน้าล่ามจะรายงานข้อผิดพลาดทางไวยากรณ์ทั่วไปโดยไม่ต้องให้คำแนะนำที่เป็นประโยชน์เกี่ยวกับสิ่งที่อาจผิดพลาด:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
สำหรับสาเหตุที่ print
กลายเป็นฟังก์ชั่นธรรมดาใน Python 3 นั่นไม่ได้เกี่ยวข้องกับรูปแบบพื้นฐานของคำสั่ง แต่เป็นวิธีที่คุณทำสิ่งที่ซับซ้อนมากขึ้นเช่นการพิมพ์หลายรายการไปยัง stderr ด้วยช่องว่างท้ายแทนที่จะจบบรรทัด
ใน Python 2:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
ใน 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
เริ่มต้นด้วยการเปิดตัว Python 3.6.3 ในเดือนกันยายน 2560 ข้อความแสดงข้อผิดพลาดบางอย่างเกี่ยวกับไวยากรณ์การพิมพ์ Python 2.x ได้รับการอัปเดตเพื่อแนะนำ Python 3.x คู่หูของพวกเขา:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
เนื่องจากกรณี "ไม่มีวงเล็บในการเรียกเพื่อพิมพ์" เป็นข้อผิดพลาดทางไวยากรณ์เวลาคอมไพล์และด้วยเหตุนี้จึงมีการเข้าถึงซอร์สโค้ดดิบจึงสามารถรวมข้อความแบบเต็มในส่วนที่เหลือของบรรทัดในการแทนที่ที่แนะนำ อย่างไรก็ตามในขณะนี้มันไม่ได้พยายามหาคำพูดที่เหมาะสมเพื่อวางรอบนิพจน์นั้น (นั่นเป็นไปไม่ได้เลยเพียงซับซ้อนพอที่มันยังไม่ได้ทำ)
TypeError
นอกจากนี้ยังมีการปรับแต่งการยกสำหรับผู้ปฏิบัติงานกะที่เหมาะสมด้วย:
>>> 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>)"?
เนื่องจากข้อผิดพลาดนี้เกิดขึ้นเมื่อโค้ดทำงานแทนที่จะเป็นคอมไพล์จึงไม่สามารถเข้าถึงซอร์สโค้ดแบบดิบดังนั้นจึงใช้เมตาตัวแปร ( <message>
และ<output_stream>
) ในนิพจน์การแทนที่ที่แนะนำแทนสิ่งที่ผู้ใช้พิมพ์จริง . ซึ่งแตกต่างจากกรณีข้อผิดพลาดทางไวยากรณ์มันตรงไปตรงมาเพื่อวางคำพูดรอบการแสดงออก Python ในข้อความแสดงข้อผิดพลาดกะขวาที่กำหนดเอง