python: SyntaxError: EOL при сканировании строкового литерала


164

У меня есть вышеупомянутая ошибка в s1="some very long string............"

Кто-нибудь знает, что я делаю не так?


1
Вы уверены, что он закрывается правильно и где-то нет неэкранированных кавычек?
QuantSoup

Неэкранированные кавычки вызывают еще одну ошибку синтаксического анализа.
JanC

Ответы:


224

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

Используйте, """если вы хотите сделать это:

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

18
И осторожно, чтобы использовать только три кавычки, у меня было четыре случайно, и ошибка появилась
Oregano

1
Как насчет объединения строк и переменных?
Даниэль Спрингер,

92

У меня была эта проблема - в конце концов я понял, что причина в том, что я включил \символы в строку. Если у вас есть какие-либо из них, «избегайте» их, \\и это должно работать нормально.


2
@ Лео их называют «экранирующими персонажами», и это довольно стандартно. Вы можете поставить rперед строкой, чтобы избежать проблем.
Эриком

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\. Проблема в том, что \это escape-символ, поэтому, чтобы использовать его в строках, вам нужно добавить еще один \.

Неправильно: 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.