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?


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
"""

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.


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.....\
...\
...."

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'))
  .....

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\\\


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.


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.


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

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.


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


2

Vous pouvez essayer ceci:

s = r'long\annoying\path'

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............"""

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'''

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 ............' ''


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.