python: SyntaxError: EOL під час сканування рядкового літералу


164

У мене вищезгадана помилка в s1="some very long string............"

Хтось знає, що я роблю неправильно?


1
Ви впевнені, що це правильно закрито, і десь не вказані цитати?
QuantumSoup

Невизначені лапки викликають чергову помилку розбору.
JanC

Відповіді:


224

Ви не ставите "до кінця рядка.

Використовуйте, """якщо ви хочете зробити це:

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

17
І обережно використовувати лише три лапки, у мене було випадково чотири, і виникла помилка
Орегано

1
А як щодо об'єднання рядків і змінних?
Даніель Спрінгер

92

У мене була ця проблема - я врешті-решт з’ясував, що причиною було те, що я включив \символи до рядка. Якщо у вас є що-небудь із цього, "уникніть" їх, \\і це повинно працювати добре.


2
@Leo їх називають "персонажами втечі", і це досить стандартно. Ви можете поставити rперед рядком, щоб уникнути проблем.
eric

17

(Припустимо, що у рядку немає / хочете розривів рядків ...)

Наскільки насправді ця струна?

Я підозрюю, що існує обмеження на тривалість зчитування рядка з файлу або з командного рядка, і тому, що кінець рядка відсікається, аналізатор бачить щось на кшталт s1="some very long string..........(без закінчення ") і таким чином видаляє помилку розбору?

Ви можете розділити довгі рядки на кілька рядків, уникаючи перерив рядків у своєму джерелі так:

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

8

У моїй ситуації я мав \r\nу моєму одноцитуваному словниковому рядку. Я замінив всі екземпляри \rз \\rі \nз \\nі зосередив своє питання, правильно повернення втекли розривів рядків в eval'ed Dict.

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

6

Я зіткнувся з подібною проблемою. У мене був рядок, який містив шлях до папки в Windows, наприклад, C:\Users\проблема полягає в тому, що \це символ втечі, і для того, щоб використовувати його в рядках, вам потрібно додати ще одну \.

Неправильно: C:\Users\

Правильно: C:\\\Users\\\


4

У мене теж була ця проблема, хоча тут були відповіді, я хочу до цього важливого моменту, /оскільки не повинно бути порожніх пробілів. Будьте в курсі цього


2

У мене також було таке точне повідомлення про помилку, для мене проблема була виправлена, додавши "\"

Виявляється, у моїй довгій рядку, розбитій приблизно на вісім рядків із символом "\" в самому кінці, на одному рядку не було "\".

Python IDLE не вказав номер рядка, на якому була увімкнена ця помилка, але вона червоно виділила абсолютно правильний оператор присвоєння змінної, що відкидає мене. Фактичний вислів промальовування рядка (кілька рядків, довгий з "\") був поруч із заявою, що виділяється. Можливо, це допоможе комусь іншому.


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

введіть тут опис зображення

На малюнку вище показана помилка та вирішений вихід.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.