python: SyntaxError: EOL ขณะที่สแกนสตริงตามตัวอักษร


164

ฉันมีข้อผิดพลาดดังกล่าวข้างต้นใน s1="some very long string............"

ไม่มีใครรู้ว่าฉันกำลังทำอะไรผิดหรือเปล่า?


1
คุณแน่ใจหรือไม่ว่ามันถูกปิดอย่างถูกต้องและไม่มีเครื่องหมายคำพูดใด ๆ
quantumSoup

คำพูดที่ไม่ใช้ Escape จะทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์
JanC

คำตอบ:


224

คุณไม่ได้ใส่"ก่อนจบบรรทัด

ใช้"""หากคุณต้องการทำสิ่งนี้:

""" a very long string ...... 
....that can span multiple lines
"""

17
และระมัดระวังที่จะใช้เพียงแค่เครื่องหมายคำพูดสามใบฉันมีสี่โดยไม่ตั้งใจและข้อผิดพลาดเกิดขึ้น
ออริกาโน

1
สิ่งที่เกี่ยวกับการเชื่อมสตริงและตัวแปรต่าง ๆ ?
Daniel Springer

92

ฉันมีปัญหานี้ - ในที่สุดฉันก็คิดออกว่าเหตุผลที่ฉันใส่\ตัวละครในสตริง หากคุณมีสิ่งเหล่านี้ "หลบหนี" พวกเขาด้วย\\และควรจะทำงานได้


2
@Leo พวกมันถูกเรียกว่า 'escape characters' และนี่เป็นมาตรฐานที่ค่อนข้างดี คุณสามารถใส่คำนำrหน้าสตริงเพื่อหลีกเลี่ยงการทำให้เกิดปัญหา
eric

17

(สมมติว่าคุณไม่มี / ต้องการให้ตัวแบ่งบรรทัดในสตริงของคุณ ... )

สายนี้ยาวเท่าไหร่จริงๆ?

ฉันสงสัยว่ามีการ จำกัด ระยะเวลาที่บรรทัดที่อ่านจากไฟล์หรือจาก commandline สามารถทำได้และเนื่องจากจุดสิ้นสุดของบรรทัดถูกตัดออกจาก parser จะเห็นสิ่งที่ต้องการs1="some very long string..........(ไม่สิ้นสุด") และทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์?

คุณสามารถแบ่งบรรทัดที่ยาวเป็นหลายบรรทัดโดยการหลีกเลี่ยงการกระจายบรรทัดในแหล่งที่มาของคุณเช่นนี้:

s1="some very long string.....\
...\
...."

8

ในสถานการณ์ของฉันฉันมี\r\nในพจนานุกรมสตริงที่ยกมาเดี่ยวของฉัน ฉันแทนที่อินสแตนซ์ทั้งหมด\rด้วย\\rและ\nด้วย\\nและมันแก้ไขปัญหาของฉันได้อย่างถูกต้องส่งคืนตัวแบ่งบรรทัดที่หลบหนีอย่างถูกต้องในคำสั่ง eval'ed

ast.literal_eval(my_str.replace('\r','\\r').replace('\n','\\n'))
  .....

6

ฉันต้องเผชิญกับปัญหาที่คล้ายกัน ฉันมีสตริงที่มีเส้นทางไปยังโฟลเดอร์ใน Windows เช่นC:\Users\ปัญหาคือว่า\เป็นตัวหนีและอื่น ๆ \เพื่อใช้ในสตริงคุณจะต้องเพิ่มอีกหนึ่ง

ไม่ถูกต้อง: C:\Users\

แก้ไข: C:\\\Users\\\


4

ฉันก็มีปัญหานี้เช่นกันแม้ว่าจะมีคำตอบอยู่ที่นี่ฉันก็อยากจะชี้ประเด็นนี้ให้ชัดเจนหลังจากที่ /ไม่ควรมีช่องว่างเปล่าด้วยตระหนักถึงมัน


2

ฉันยังมีข้อความแสดงข้อผิดพลาดที่แน่นอนสำหรับฉันปัญหาได้รับการแก้ไขโดยการเพิ่ม "\"

ปรากฎว่าสตริงยาวของฉันแบ่งออกเป็นแปดบรรทัดด้วย "\" ที่ส่วนท้ายสุดขาด "\" ในหนึ่งบรรทัด

งูหลามว่างไม่ได้ระบุหมายเลขบรรทัดที่ข้อผิดพลาดนี้อยู่บน แต่มันสีแดงเน้นสั่งการกำหนดตัวแปรที่ถูกต้องทั้งหมดโยนฉันลง คำสั่งสตริง misshapen ที่แท้จริง (ยาวหลายบรรทัดด้วย "\") อยู่ติดกับคำสั่งที่ถูกเน้น บางทีนี่อาจช่วยคนอื่นได้


2

ในกรณีของฉันฉันใช้ Windows ดังนั้นฉันต้องใช้เครื่องหมายคำพูดคู่แทนคำเดียว

C:\Users\Dr. Printer>python -mtimeit -s"a = 0"
100000000 loops, best of 3: 0.011 usec per loop

2

ฉันได้รับข้อผิดพลาดนี้ในฟังก์ชั่น postgresql ฉันมี SQL ที่ยาวซึ่งแบ่งออกเป็นหลายบรรทัดด้วย \ เพื่อให้อ่านง่ายขึ้น อย่างไรก็ตามนั่นเป็นปัญหา ฉันลบทั้งหมดและทำให้เป็นหนึ่งบรรทัดเพื่อแก้ไขปัญหา ฉันใช้ pgadmin III


2

ในกรณีของฉันกับ Mac OS X ฉันมีคำสั่งต่อไปนี้:

model.export_srcpkg(platform, toolchain, 'mymodel_pkg.zip', 'mymodel.dylib’)

ฉันได้รับข้อผิดพลาด:

  File "<stdin>", line 1
model.export_srcpkg(platform, toolchain, 'mymodel_pkg.zip', 'mymodel.dylib’)
                                                                             ^
SyntaxError: EOL while scanning string literal

หลังจากฉันเปลี่ยนเป็น:

model.export_srcpkg(platform, toolchain, "mymodel_pkg.zip", "mymodel.dylib")

มันทำงานได้ ...

เดวิด


2

คุณสามารถลองสิ่งนี้:

s = r'long\annoying\path'

1
นั่นคือคำตอบที่ดีที่สุด สามารถลองs = r'long\annoying\path\\'ได้
shahar_m

1

คุณvariable(s1)มีหลายบรรทัด ในการดำเนินการนี้ (เช่นคุณต้องการให้สตริงของคุณครอบคลุมหลายบรรทัด) คุณต้องใช้เครื่องหมายคำพูดสามคำ ("" ")

s1="""some very long 
string............"""

1

ในกรณีนี้ใบเสนอราคาเดียวสามใบหรือใบเสนอราคาสองใบทั้งคู่จะใช้งานได้! ตัวอย่างเช่น:

    """Parameters:
    ...Type something.....
    .....finishing statement"""

หรือ

    '''Parameters:
    ...Type something.....
    .....finishing statement'''

0

คำตอบก่อนหน้าส่วนใหญ่นั้นถูกต้องและคำตอบของฉันคล้ายกับ aaronasterling คุณสามารถทำใบเสนอราคาเดียว 3 รายการ s1 = '' 'สตริงที่ยาวมากบาง ............ ' ''


0

ฉันประสบปัญหาเดียวกันขณะเข้าถึงไดเรกทอรีฮาร์ดไดรฟ์ จากนั้นฉันก็แก้มันด้วยวิธีนี้

 import os
 os.startfile("D:\folder_name\file_name") #running shortcut
 os.startfile("F:") #accessing directory

ป้อนคำอธิบายรูปภาพที่นี่

ภาพด้านบนแสดงข้อผิดพลาดและแก้ไขผลลัพธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.