python: SyntaxError: EOL lors de l'analyse d'une chaîne littérale

164

J'ai l'erreur mentionnée ci-dessus dans s1="some very long string............"

Quelqu'un sait-il ce que je fais mal?

l --''''''--------- '' '' '' '' '' '
la source
1
Êtes-vous sûr qu'il est fermé correctement et qu'il n'y a pas de guillemets sans échappement quelque part?
quantumSoup
Les citations sans échappement génèrent une autre erreur d'analyse.
JanC

Réponses:

224

Vous ne mettez pas un "avant la fin de la ligne.

Utilisez """si vous souhaitez faire ceci:

""" a very long string ...... 
....that can span multiple lines
"""
aaronasterling
la source
18
Et attention à n'utiliser que trois guillemets, j'en ai eu quatre par accident et l'erreur s'est produite
Origan
1
Qu'en est-il de la concaténation de chaînes et de variables?
Daniel Springer le
92

J'ai eu ce problème - j'ai finalement compris que la raison était que j'avais inclus des \caractères dans la chaîne. Si vous en avez, «échappez-les» avec \\et cela devrait fonctionner correctement.

Chris H
la source
2
@Leo ils sont appelés «caractères d'échappement», et c'est assez standard. Vous pouvez mettre un ravant la chaîne pour éviter qu'ils ne causent des problèmes.
eric
17

(En supposant que vous n'avez pas / voulez des sauts de ligne dans votre chaîne ...)

Quelle est la longueur réelle de cette chaîne?

Je soupçonne qu'il y a une limite à la longueur d'une ligne lue à partir d'un fichier ou de la ligne de commande, et parce que la fin de la ligne est coupée, l'analyseur voit quelque chose comme s1="some very long string..........(sans fin ") et lance ainsi une erreur d'analyse?

Vous pouvez diviser les longues lignes en plusieurs lignes en échappant les sauts de ligne dans votre source comme ceci:

s1="some very long string.....\
...\
...."
JanC
la source
8

Dans ma situation, j'avais \r\ndans mes chaînes de dictionnaire à guillemets simples. J'ai remplacé toutes les instances de \rwith \\ret \nwith \\net cela a résolu mon problème, renvoyant correctement les sauts de ligne échappés dans le dict évalué.

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

J'ai fait face à un problème similaire. J'avais une chaîne qui contenait le chemin vers un dossier dans Windows, par exemple C:\Users\Le problème est qu'il \s'agit d'un caractère d'échappement et donc, pour l'utiliser dans des chaînes, vous devez en ajouter un de plus \.

Incorrect: C:\Users\

Correct: C:\\\Users\\\

Ashish Kulkarni
la source
4

J'ai aussi eu ce problème, bien qu'il y ait eu des réponses ici, je veux à un point important à ce sujet après /qu'il ne devrait pas y avoir d'espaces vides.

madhu131313
la source
2

J'ai également eu ce message d'erreur exact, pour moi le problème a été résolu en ajoutant un "\"

Il s'avère que ma longue chaîne, divisée en huit lignes environ avec "\" à la toute fin, manquait un "\" sur une ligne.

Python IDLE n'a pas spécifié de numéro de ligne sur lequel cette erreur se trouvait, mais il a mis en évidence en rouge une instruction d'affectation de variable totalement correcte, ce qui m'a déstabilisé. L'instruction de chaîne déformée réelle (plusieurs lignes avec "\") était adjacente à l'instruction en surbrillance. Peut-être que cela aidera quelqu'un d'autre.

user12711
la source
2

Dans mon cas, j'utilise Windows donc je dois utiliser des guillemets doubles au lieu de simples.

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

J'obtenais cette erreur dans la fonction postgresql. J'avais un long SQL que j'ai divisé en plusieurs lignes avec \ pour une meilleure lisibilité. Cependant, c'était le problème. J'ai tout supprimé et les ai créés en une seule ligne pour résoudre le problème. J'utilisais pgadmin III.

Ram Dwivedi
la source
2

Dans mon cas avec Mac OS X, j'avais la déclaration suivante:

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

J'obtenais l'erreur:

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

Après avoir changé pour:

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

Ça a marché...

David

us_david
la source
2

Vous pouvez essayer ceci:

s = r'long\annoying\path'
ZakS
la source
1
C'est la meilleure réponse. Peut également essayer s = r'long\annoying\path\\'.
shahar_m
1

Votre variable(s1)s'étend sur plusieurs lignes. Pour ce faire (c'est-à-dire que vous voulez que votre chaîne s'étende sur plusieurs lignes), vous devez utiliser des guillemets triples ("" ").

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

Dans ce cas, trois citations simples ou trois citations doubles fonctionneront toutes les deux! Par exemple:

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

OU

    '''Parameters:
    ...Type something.....
    .....finishing statement'''
Areeha
la source
0

La plupart des réponses précédentes sont correctes et ma réponse est très similaire à aaronasterling, vous pouvez également faire 3 guillemets simples s1 = '' 'une très longue chaîne ............' ''

grepit
la source
0

J'avais rencontré le même problème lors de l'accès à n'importe quel répertoire de disque dur. Ensuite, je l'ai résolu de cette façon.

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

entrez la description de l'image ici

L'image ci-dessus montre une erreur et une sortie résolue.

Md Rakibuz Sultan
la source