web-dev-qa-db-fra.com

python: SyntaxError: EOL lors de l'analyse du littéral de chaîne

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

Est-ce que quelqu'un sait ce que je fais mal?

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

Utilisez """ si vous voulez faire ceci:

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

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

76
Chris H

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

Combien de temps dure vraiment cette chaîne?

Je suspecte qu'il y ait une limite à la longueur d'une ligne lue depuis un fichier ou depuis 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 une fin ") et génère donc une erreur d'analyse?

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

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

Dans ma situation, j’avais \r\n dans les chaînes de mon dictionnaire entre guillemets. J'ai remplacé toutes les occurrences de \r par \\r et \n par \\n et il a résolu le problème, en renvoyant correctement les sauts de ligne échappés dans le dict valué.

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

J'ai fait face à un problème similaire. J'avais une chaîne qui contenait le chemin d'accès à un dossier dans Windows, par exemple. C:\Users\ Le problème est que \ est un caractère d'échappement. Par conséquent, pour l'utiliser dans les chaînes, vous devez ajouter un autre \.

Incorrect: C:\Users\

Correct: C:\\\Users\\\

4
Ashish kulkarni

Moi aussi j'ai eu ce problème, bien qu'il y ait des réponses ici. Je veux un point important à ce point après / il ne devrait pas y avoir d'espaces vides. Soyez au courant

4
madhu131313

Dans mon cas, j'utilise Windows, je dois donc 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
Aminah Nuraini

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

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

Python IDLE n'a pas spécifié de numéro de ligne sur lequel cette erreur était allumée, mais il a mis en surbrillance une instruction d'affectation de variable totalement correcte, ce qui m'a jeté. La déclaration de chaîne difforme (plusieurs lignes avec "\") était adjacente à la déclaration en surbrillance. Peut-être que cela aidera quelqu'un d'autre.

2
user12711

Je recevais cette erreur dans la fonction postgresql. J'ai eu un long SQL que j'ai cassé en plusieurs lignes avec\pour une meilleure lisibilité. Cependant, c'était le problème. J'ai tout supprimé et les ai mis en une ligne pour résoudre le problème. J'utilisais pgadmin III.

2
Ram Dwivedi

Votre variable(s1) s'étend sur plusieurs lignes. Pour ce faire (si vous voulez que votre chaîne couvre plusieurs lignes), vous devez utiliser des guillemets triples ("" ").

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

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

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

Je recevais l'erreur:

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

Après je change à:

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

Ça a marché...

David

1
us_david