Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

แก้ไข Python SyntaxError: EOL while scanning string literal

แม่นักพัฒนาที่เก่งที่สุดก็ทำข้อผิดพลาดทางไวยากรณ์ (syntax errors) ได้ตลอดเวลาเมื่อเขียนโค้ด ภาษาโปรแกรมมิ่งมีกฎมากมาย และเพียงข้อผิดพลาดเล็กน้อย (typo) ก็สามารถทำให้เกิดข้อผิดพลาดได้

หากคุณเจอข้อผิดพลาด "syntaxerror: EOL while scanning string literal" อย่ากลัว ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และวิธีแก้ไข เราจะเดินทางผ่านสถานการณ์ตัวอย่างบางส่วนเพื่อช่วยให้คุณระบุสาเหตุและวิธีแก้ไขที่เป็นไปได้

มาเริ่มกันเลย!

ปัญหา: syntaxerror: EOL while scanning string literal

ไวยากรณ์ (Syntax) เหมือนไวยากรณ์ของภาษาโปรแกรมมิ่ง ภาษาอังกฤษมีกฎควบคุมเครื่องหมายวรรคตอนและการสะกดคำ ภาษาโปรแกรมมิ่งก็มีกฎคล้ายกัน

มา看看ข้อผิดพลาดของเรา: 

syntaxerror: EOL while scanning string literal

ข้อความ SyntaxError บอกเราว่าเราไม่ได้ปฏิบัติตามกฎไวยากรณ์ของ Python

คำอธิบายของข้อผิดพลาดระบุว่า Python คาดหวังตัวอักษรเฉพาะที่จะปรากฏภายในสิ้นสุดบรรทัดของโค้ดที่ไม่พบ ตัวอย่างเช่น Python อาจคาดหวังตัวอักษรปิดสตริง (”) ภายในสิ้นสุดบรรทัดที่คุณเปิดสตริง

หากพบข้อผิดพลาดทางไวยากรณ์ Python จะหยุด execute โปรแกรม เนื่องจาก Python interpreter ต้องการให้คุณแก้ไขปัญหาก่อนที่จะอ่านโค้ดส่วนที่เหลือได้

ข้อผิดพลาดนี้มักเกิดจาก:

  • สตริงที่ขยายหลายบรรทัดโดยใช้ไวยากรณ์ผิด
  • เครื่องหมายอ้างอิงหายไป
  • เครื่องหมายอ้างอิงไม่ตรงกัน

สถานการณ์ตัวอย่าง: สตริงหลายบรรทัด (Multi-line Strings)

ใน Python สตริงสามารถขยายหลายบรรทัดได้ ไวยากรณ์สำหรับสตริงหลายบรรทัดแตกต่างจากสตริงทั่วไป สตริงหลายบรรทัดต้องมีการอ้างอิงสามเครื่องหมาย (triple quoted) หรือเขียนด้วยเครื่องหมายอ้างอิงสามเครื่องหมาย

มา看看สตริงหลายบรรทัด:

def welcome_hero(): message = "Welcome, Hero! You have just entered the Castle of Doom. Your challenge, should you choose to accept it, is to locate the Sacred Emerald and take it back to the travelling salesman." print(message) welcome_hero()

เรากำหนดฟังก์ชันชื่อ welcome_hero() ฟังก์ชันนี้พิมพ์ข้อความไปยังคอนโซล ข้อความนี้ถูกกำหนดให้กับตัวแปร "message"

ลองรันโค้ดของเรา:

File "main.py", line 2 message = "Welcome, Hero! ^ SyntaxError: EOL while scanning string literal

มีข้อผิดพลาดคืนค่า เนื่องจากสตริงที่ใช้เครื่องหมายอ้างอิงเดี่ยวหรือคู่ไม่สามารถขยายหลายบรรทัดได้ เพื่อแก้ปัญหานี้ เราต้องล้อมสตริงของเราด้วยเครื่องหมายอ้างอิงเดี่ยวหรือคู่สามเครื่องหมาย ข้อความใดๆ ที่ปรากย์ระหว่างตัวอักษรเหล่านี้จะเป็นส่วนหนึ่งของสตริง:

message = """Welcome, Hero! You have just entered the Castle of Doom. Your challenge, should you choose to accept it, is to locate the Sacred Emerald and take it back to the travelling salesman."""

ลองรันโค้ดของเราด้วยบรรทัดที่แก้ไขแล้ว โค้ดของเราคืนค่า:

Welcome, Hero! You have just entered the Castle of Doom. Your challenge, should you choose to accept it, is to locate the Sacred Emerald and take it back to the travelling salesman.

สำเร็จ! โค้ดของเราพิมพ์ข้อความโดยไม่มีข้อผิดพลาด

สถานการณ์ตัวอย่าง: เครื่องหมายอ้างอิงหายไป (Missing Quotation Mark)

สตริงต้องถูกปิดหลังจากที่เนื้อหาของสตริงถูกประกาศแล้ว มิฉะนั้น Python จะคืนค่าข้อผิดพลาดทางไวยากรณ์ มา看看สตริงที่ไม่ได้ปิด:

def welcome_hero(): message = "Welcome, Hero! print(message) welcome_hero()

ลองรันโค้ดของเรา:

File "main.py", line 2 message = "Welcome, Hero! ^ SyntaxError: EOL while scanning string literal

เราลืมปิดสตริงของเรา หากคุณดูบรรทัดโค้ดที่เราประกาศตัวแปร "message" ไม่มีตัวอักษรปิดสตริง

เราสามารถแก้ไขข้อผิดพลาดนี้โดยการปิดสตริงของเราโดยใช้ เครื่องหมายอ้างอิงเดียวกัน ที่เราใช้เปิดสตริงของเรา

def welcome_hero(): message = "Welcome, Hero!" print(message) welcome_hero()

ลองรันโค้ดของเราอีกครั้ง:

Welcome, Hero!

โค้ดของเรารันสำเร็จ

สถานการณ์ตัวอย่าง: เครื่องหมายอ้างอิงไม่ตรงกัน (Mismatching Quotation Marks)

ประเภทของเครื่องหมายอ้างอิงที่คุณใช้เปิดสตริง ควรเป็นเหมือนกับประเภทที่คุณใช้ปิดสตริง

ข้อผิดพลาดทางไวยากรณ์จะถูกคืนค่าเมื่อประเภทของเครื่องหมายอ้างอิงที่คุณใช้เปิดและปิดสตริงต่างกัน มา看看โปรแกรมที่เปิดสตริงใช้เครื่องหมายอ้างอิงเดี่ยว (‘) และปิดสตริงใช้เครื่องหมายอ้างอิงคู่ (”):

def welcome_hero(): message = 'Welcome, Hero!" print(message) welcome_hero()

โค้ดของเราคืนค่า:

File "main.py", line 2 message = 'Welcome, Hero!" ^ SyntaxError: EOL while scanning string literal

เราสามารถแก้ปัญหานี้โดยทำให้เครื่องหมายอ้างอิงของเราตรงกัน เราจะเปลี่ยนเครื่องหมายอ้างอิงแรกให้ใช้เครื่องหมายอ้างอิงคู่ (“):

def welcome_hero(): message = "Welcome, Hero!" print(message) welcome_hero()

โค้ดของเราตอนนี้รันสำเร็จ: Welcome, Hero!



สรุป

ข้อผิดพลาด "syntaxerror: EOL while scanning string literal" ถูกประสบโดยนักพัฒนา Python ทุกคน ข้อผิดพลาดนี้เกิดขึ้นเมื่อ:

  • คุณลืมปิดสตริง
  • คุณปิดสตริงโดยใช้สัญลักษณ์ผิด
  • คุณประกาศสตริงหลายบรรทัดโดยใช้เครื่องหมายอ้างอิงหนึ่งเครื่องหมายแทนที่จะเป็นสามเครื่องหมาย

เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบว่าสภาวะใดสภาวะหนึ่งข้างต้นเป็นจริงหรือไม่ จากนั้น ทำการเปลี่ยนแปลงที่จำเป็นในโค้ดของคุณ ตอนนี้คุณพร้อมที่จะเริ่มแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพ Python แล้ว!