python: SyntaxError: EOL durante la scansione letterale di stringhe


Risposte:


224

Non stai mettendo un "prima della fine della linea.

Usa """se vuoi fare questo:

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

18
E attento a usare solo tre virgolette, ne ho avute quattro per caso e l'errore è
emerso

1
Che ne dici di concatenare stringhe e variabili?
Daniel Springer,

92

Ho avuto questo problema - alla fine ho capito che il motivo era che avevo incluso i \caratteri nella stringa. Se hai uno di questi, "sfuggili" con \\e dovrebbe funzionare bene.


2
@Leo si chiamano "personaggi di escape", e questo è piuttosto standard. Puoi inserire un carattere rprima della stringa per evitare che causino problemi.
eric,

17

(Supponendo che non ci siano / desideri interruzioni di riga nella stringa ...)

Quanto dura davvero questa stringa?

Ho il sospetto che ci sia un limite a quanto può essere lunga una riga letta da un file o dalla riga di comando, e poiché la fine della riga viene tagliata via il parser vede qualcosa di simile s1="some very long string..........(senza una fine ") e quindi genera un errore di analisi?

Puoi dividere le lunghe file in più righe sfuggendo alle interruzioni di riga nella tua fonte in questo modo:

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

8

Nella mia situazione, avevo \r\nnel mio dizionario stringhe a virgoletta singola. Ho sostituito tutte le istanze di \rcon \\re \ncon \\ne risolto il mio problema, restituendo correttamente le interruzioni di riga di escape nel dict valutato.

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

6

Ho affrontato un problema simile. Avevo una stringa che conteneva il percorso di una cartella in Windows, ad esempio C:\Users\Il problema è che \è un carattere di escape e quindi per usarlo nelle stringhe devi aggiungerne uno in più \.

non corretto: C:\Users\

Corretta: C:\\\Users\\\


4

Anch'io ho avuto questo problema, anche se ci sono state risposte qui voglio un punto importante a questo dopo che /non dovrebbero esserci spazi vuoti.


2

Ho anche avuto questo messaggio di errore esatto, per me il problema è stato risolto aggiungendo un "\"

Si scopre che la mia lunga stringa, spezzata in circa otto righe con "\" alla fine, mancava un "\" su una riga.

Python IDLE non ha specificato un numero di riga in cui si trovava questo errore, ma ha evidenziato in rosso un'istruzione di assegnazione variabile totalmente corretta, scartandomi. L'effettiva istruzione stringa deformata (più righe lunghe con "\") era adiacente all'istruzione evidenziata. Forse questo aiuterà qualcun altro.


2

Nel mio caso, uso Windows, quindi devo usare virgolette doppie anziché singole.

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

2

Stavo ottenendo questo errore nella funzione postgresql. Ho avuto un lungo SQL che ho suddiviso in più righe con \ per una migliore leggibilità. Tuttavia, quello era il problema. Ho rimosso tutto e li ho fatti in una riga per risolvere il problema. Stavo usando pgadmin III.


2

Nel mio caso con Mac OS X, avevo la seguente dichiarazione:

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

Stavo ottenendo l'errore:

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

Dopo il passaggio a:

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

Ha funzionato...

David


2

Puoi provare questo:

s = r'long\annoying\path'

1
Questa è la risposta migliore. Puoi anche provare s = r'long\annoying\path\\'.
shahar_m,

1

Il tuo si variable(s1)estende su più righe. Per fare questo (cioè vuoi che la tua stringa si estenda su più righe), devi usare le virgolette triple ("" ").

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

1

In questo caso, tre citazioni singole o tre virgolette doppie funzioneranno entrambe! Per esempio:

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

O

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

0

La maggior parte delle risposte precedenti sono corrette e la mia risposta è molto simile a aaronasterling, potresti anche fare 3 virgolette singole s1 = '' 'una stringa molto lunga ............' ''


0

Ho avuto lo stesso problema durante l'accesso a qualsiasi directory del disco rigido. Quindi l'ho risolto in questo modo.

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

inserisci qui la descrizione dell'immagine

L'immagine sopra mostra un errore e un output risolto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.