python: SyntaxError: EOL al escanear literal de cadena

164

Tengo el error mencionado anteriormente en s1="some very long string............"

¿Alguien sabe lo que estoy haciendo mal?

l --''''''--------- '' '' '' '' '' ''
fuente
1
¿Estás seguro de que se está cerrando correctamente y no hay citas sin escape en alguna parte?
quantumSoup
Las citas sin escapes arrojan otro error de análisis.
JanC

Respuestas:

224

No está poniendo un "antes del final de la línea.

Úselo """si desea hacer esto:

""" a very long string ...... 
....that can span multiple lines
"""
aaronasterling
fuente
17
Y con cuidado de usar solo tres comillas, tuve cuatro por accidente y apareció el error
Orégano
1
¿Qué pasa con la concatenación de cadenas y variables?
Daniel Springer
92

Tuve este problema: eventualmente descubrí que la razón era que había incluido \caracteres en la cadena. Si tiene alguno de estos, "escape" con ellos \\y debería funcionar bien.

Chris H
fuente
2
@Leo se llaman 'personajes de escape', y esto es bastante estándar. Puede poner un rantes de la cadena para evitar que causen problemas.
Eric
17

(Suponiendo que no tiene / quiere saltos de línea en su cadena ...)

¿Cuánto dura realmente esta cuerda?

Sospecho que hay un límite en cuanto al tiempo que puede durar una línea leída de un archivo o de la línea de comandos, y debido a que el final de la línea se interrumpe, el analizador ve algo así s1="some very long string..........(sin un final ") y, por lo tanto, arroja un error de análisis.

Puede dividir líneas largas en varias líneas escapando de los saltos de línea en su fuente de esta manera:

s1="some very long string.....\
...\
...."
JanC
fuente
8

En mi situación, tenía \r\nen mis cadenas de diccionario entre comillas simples. Reemplacé todas las instancias de \rcon \\ry \ncon \\ny solucionó mi problema, devolviendo correctamente los saltos de línea escapados en el dict evaluado.

ast.literal_eval(my_str.replace('\r','\\r').replace('\n','\\n'))
  .....
Nicolas Bouliane
fuente
6

Me enfrenté a un problema similar. Tenía una cadena que contenía la ruta a una carpeta en Windows, por ejemplo, C:\Users\el problema es que \es un carácter de escape y, por lo tanto, para usarlo en cadenas necesita agregar uno más \.

Incorrecto: C:\Users\

Correcto: C:\\\Users\\\

Ashish kulkarni
fuente
4

También tuve este problema, aunque había respuestas aquí, quiero un punto importante para esto después de /que no haya espacios vacíos.

madhu131313
fuente
2

También recibí este mensaje de error exacto, para mí el problema se solucionó agregando un "\"

Resulta que a mi cadena larga, dividida en aproximadamente ocho líneas con "\" al final, le faltaba una "\" en una línea.

Python IDLE no especificó un número de línea en el que estaba este error, pero resaltó en rojo una declaración de asignación de variable totalmente correcta, lo que me hizo perder el conocimiento. La declaración de cadena deforme real (varias líneas largas con "\") era adyacente a la declaración que se resaltaba. Quizás esto ayude a alguien más.

usuario12711
fuente
2

En mi caso, uso Windows, así que tengo que usar comillas dobles en lugar de simples.

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

Estaba recibiendo este error en la función postgresql. Tenía un SQL largo que dividí en varias líneas con \ para una mejor legibilidad. Sin embargo, ese era el problema. Eliminé todo y los hice en una línea para solucionar el problema. Estaba usando pgadmin III.

Ram Dwivedi
fuente
2

En mi caso con Mac OS X, tuve la siguiente declaración:

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

Estaba recibiendo el error:

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

Después de cambiar a:

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

Funcionó...

David

us_david
fuente
2

Puedes probar esto:

s = r'long\annoying\path'
ZakS
fuente
1
Esa es la mejor respuesta. También puede intentarlo s = r'long\annoying\path\\'.
shahar_m
1

Su variable(s1)abarca varias líneas. Para hacer esto (es decir, si desea que su cadena abarque varias líneas), debe usar comillas triples ("" ").

s1="""some very long 
string............"""
Khandelwal-manik
fuente
1

¡En este caso, tres citas simples o tres citas dobles funcionarán! Por ejemplo:

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

O

    '''Parameters:
    ...Type something.....
    .....finishing statement'''
Areeha
fuente
0

La mayoría de las respuestas anteriores son correctas y mi respuesta es muy similar a aaronasterling, también podría hacer 3 citas simples s1 = '' 'una cadena muy larga ............' ''

grepit
fuente
0

Me enfrenté al mismo problema al acceder a cualquier directorio del disco duro. Luego lo resolví de esta manera.

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

ingrese la descripción de la imagen aquí

La imagen de arriba muestra un error y un resultado resuelto.

Md.Rakibuz Sultan
fuente