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

164

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

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

л --''''''--------- «» «» «» «» «» «»
источник
1
Вы уверены, что он закрывается правильно и где-то нет неэкранированных кавычек?
QuantSoup
Неэкранированные кавычки вызывают еще одну ошибку синтаксического анализа.
JanC

Ответы:

224

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

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

""" a very long string ...... 
....that can span multiple lines
"""
aaronasterling
источник
18
И осторожно, чтобы использовать только три кавычки, у меня было четыре случайно, и ошибка появилась
Oregano
1
Как насчет объединения строк и переменных?
Даниэль Спрингер,
92

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

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

(Предполагая, что в вашей строке нет / хотите разрывов строк ...)

Как долго эта строка действительно?

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

Вы можете разбить длинные строки на несколько строк, избегая разрывов строк в вашем источнике, например:

s1="some very long string.....\
...\
...."
Janc
источник
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

У меня тоже была эта проблема, хотя здесь были ответы, я хочу отметить важный момент после того, как /не должно быть пустых мест.

madhu131313
источник
2

У меня также было это точное сообщение об ошибке, для меня проблема была исправлена ​​добавлением "\"

Оказывается, в моей длинной строке, разбитой примерно на восемь строк с «\» в самом конце, отсутствовала буква «\» в одной строке.

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

user12711
источник
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")

Это сработало...

Дэвид

us_david
источник
2

Вы можете попробовать это:

s = r'long\annoying\path'
Закс
источник
1
Это лучший ответ. Можно также попробовать s = r'long\annoying\path\\'.
shahar_m
1

Ваш variable(s1)охватывает несколько строк. Чтобы сделать это (т.е. вы хотите, чтобы ваша строка занимала несколько строк), вы должны использовать тройные кавычки ("" ").

s1="""some very long 
string............"""
Khandelwal-Маник
источник
1

В этом случае будут работать три одинарные или три двойные! Например:

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

ИЛИ

    '''Parameters:
    ...Type something.....
    .....finishing statement'''
Areeha
источник
0

Большинство предыдущих ответов верны, и мой ответ очень похож на aaronasterling, вы также можете сделать 3 одинарные кавычки s1 = '' 'очень длинная строка ............' ''

grepit
источник
0

Я столкнулся с той же проблемой при доступе к любому каталогу жесткого диска. Тогда я решил это таким образом.

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

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

Рисунок выше показывает ошибку и разрешенный вывод.

Г-н Ракибуз Султан
источник