ไวยากรณ์ (Syntax) คือกฎที่กำหนดว่าภาษาโปรแกรมมิ่งควรเขียนอย่างไร แต่ละภาษามีชุดกฎไวยากรณ์ของตัวเองที่แตกต่างจากภาษาอื่น เราสามารถเปรียบเทียบได้เหมือนไวยากรณ์หรือเครื่องหมายวรรคตอนในภาษาพูด เครื่องหมายคำถามในภาษาอังกฤษ (?) แตกต่างจากเครื่องหมายคำถามในภาษากรีก (;)
คุณสามารถสรุปได้ว่าเมื่อคุณได้รับข้อผิดพลาดด้านไวยากรณ์ (syntax error) หมายความว่าคุณกำลังเขียนภาษาโปรแกรมมิ่งผิดพลาด คุณอาจพลาดลืมใส่หรือใช้ไวยากรณ์จากภาษาอื่น ซึ่งเป็นสิ่งที่มักเกิดขึ้นเมื่อนักพัฒนาขยายเทคโนโลยีสแต็ก (tech stack) ของพวกเขา
ในบทความนี้ เราจะเจาะลึกเกี่ยวกับ SyntaxError ที่พบบ่อยใน Python พร้อมตัวอย่าง และแสดงวิธีแก้ไขพวกเขา
SyntaxError ที่พบบ่อยและวิธีแก้ไข
ดิกชันนารี (Dictionaries)
ลองหาว่าทำไมข้อผิดพลาดด้านไวยากรณ์ถึงถูกโยนออกมาในโค้ดด้านล่าง:
student_gpas = { 'Mary': 3.0, 'Tim': 2.5 'John': 4.0 }
print(f'Mary has a {student_gpas["Mary"]} GPA.') # returns SyntaxError: invalid syntax
ถ้าคุณตอบว่า "ขาดเครื่องหมายจุลภาคหลังคู่คีย์-ค่าของ 2.5" คุณตอบถูกต้อง ดิกชันนารี เหมือนออบเจ็กต์ใน JavaScript ต้องการเครื่องหมายจุลภาคหลังคู่คีย์-ค่าแต่ละคู่ ยกเว้นคู่คีย์-ค่าสุดท้าย
วิธีแก้ไขข้อผิดพลาดข้างต้นคือ:
student_gpas = { 'Mary': 3.0, 'Tim': 2.5, 'John': 4.0 }
print(f'Mary has a {student_gpas["Mary"]} GPA.') # returns Mary has a 3.0 GPA.
เครื่องหมายอ้างอิง (Quotes)
ลองหาว่าทำไมข้อผิดพลาดด้านไวยากรณ์ในโค้ดด้านล่างถึงถูกโยนออกมา:
print('Mary's teacher stated that she has a 3.0 GPA.') # returns SyntaxError: invalid syntax
ถ้าคุณตอบว่า "การใช้เครื่องหมายอ้างอิงประเภทเดียวกันภายในเครื่องหมายอ้างอิง" คุณก็ถูกต้อง มีหลายวิธีในการหลีกเลี่ยงข้อผิดพลาดด้านไวยากรณ์เมื่อใช้เครื่องหมายอ้างอิงใน Python
1. ใช้เครื่องหมายอ้างอิงคู่ (double quotation marks)
print("Mary's teacher stated that she has a 3.0 GPA.")
2. ใช้เครื่องหมายแบ็กสแลช (backslash)
print('Mary\'s teacher stated that she has a 3.0 GPA.')
การใช้ไวยากรณ์ใหม่กับเวอร์ชัน Python เก่า
ตรวจสอบให้แน่ใจว่าไวยากรณ์ที่คุณใช้เข้ากันได้กับเวอร์ชัน Python ที่คุณใช้งาน ตัวอย่างเช่น Python เวอร์ชันก่อน 3.6 จะไม่สามารถรู้จัก f-strings ได้ และจะโยนข้อผิดพลาด invalid syntax หากคุณรันไวยากรณ์นั้น นักพัฒนาสามารถอัปเดตเวอร์ชัน หรือใช้ไวยากรณ์ที่เข้ากันได้กับเวอร์ชันที่ตั้งไว้
student_gpas = { 'Mary': 3.0, 'Tim': 2.5, 'John': 4.0 }
print(f'Mary has a {student_gpas["Mary"]} GPA.') # returns SyntaxError: invalid syntax on older versions of Python
การใช้คีย์เวิร์ด Python อย่างไม่เหมาะสม
วิธีที่ดีที่สุดในการรู้ว่าคุณกำลังใช้คีย์เวิร์ด Python อย่างไม่เหมาะสมคือการรู้ว่าคีย์เวิร์ดเหล่านั้นคืออะไรและใช้ทำอะไรใน Python สำหรับภาพรวมเชิงลึกเกี่ยวกับคีย์เวิร์ด Python บางส่วน โปรดดูบทความ How to Use the Python not Keyword, The Python Yield Keyword: A Guide, และ Python positional argument follows keyword argument Solution
ลองหาว่าทำไมข้อผิดพลาดด้านไวยากรณ์ในโค้ดด้านล่างถึงถูกโยนออกมา:
continue = True print(continue) # returns SyntaxError: invalid syntax
ถ้าคุณตอบว่า "เพราะเรากำลังตั้งค่าให้กับคีย์เวิร์ด" คุณถูกต้อง Continue เป็นคีย์เวิร์ดใน Python ที่ใช้เพื่อดำเนินการต่อไปยังรอบวนซ้ำ (iteration) ถัดไปของลูป วิธีแก้ไขข้างต้นคือการตั้งค่า boolean True ให้กับชื่อตัวแปรที่ไม่ใช่คีย์เวิร์ดของ Python
on = True print(on) # returns True