python: SyntaxError: EOL podczas skanowania literału ciągu


Odpowiedzi:


224

Nie wstawiasz "przed końcem linii.

Użyj, """jeśli chcesz to zrobić:

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

17
Uważając, aby użyć tylko trzech cudzysłowów, przez przypadek miałem cztery i pojawił się błąd
Oregano,

1
A co z konkatenacją łańcuchów i zmiennych?
Daniel Springer,

92

Miałem ten problem - w końcu doszedłem do wniosku, że powodem było umieszczenie \znaków w ciągu. Jeśli masz któryś z nich, „ucieknij” przed nimi \\i powinno działać dobrze.


2
@Leo nazywają się „postaciami ucieczki” i jest to dość standardowe. Możesz umieścić rprzed napisem, aby uniknąć powodowania problemów.
eric

17

(Zakładając, że nie masz / nie chcesz znaków końca linii w swoim ciągu ...)

Jak długi jest ten ciąg?

Podejrzewam, że istnieje ograniczenie co do tego, jak długo może być odczytany wiersz z pliku lub z wiersza poleceń, a ponieważ koniec wiersza jest odcinany, parser widzi coś takiego s1="some very long string..........(bez zakończenia ") i w ten sposób zgłasza błąd analizy?

Możesz podzielić długie wiersze na wiele wierszy, unikając podziałów wierszy w źródle w następujący sposób:

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

8

W mojej sytuacji miałem \r\nw moim słowniku ciągi znaków w pojedynczych cudzysłowach. Wymieniłem wszystkie wystąpienia \rze \\ri \nze \\ni to naprawić mój problem, właściwie powrocie uciekły podziały wiersza w eval'ed dict.

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

6

Miałem podobny problem. Miałem string, który zawierał ścieżkę do folderu w Windows np C:\Users\. Problem polega na tym, że \jest to znak ucieczki, więc aby użyć go w łańcuchach, musisz dodać jeszcze jeden \.

Błędny: C:\Users\

Poprawny: C:\\\Users\\\


4

Ja też miałem ten problem, chociaż były tutaj odpowiedzi, chciałbym przejść do ważnej kwestii, ponieważ /nie powinno być pustych miejsc.


2

Miałem też dokładnie ten komunikat o błędzie, dla mnie problem został rozwiązany poprzez dodanie znaku „\”

Okazuje się, że w moim długim łańcuchu, podzielonym na około osiem wierszy z „\” na samym końcu, brakowało „\” w jednej linii.

Python IDLE nie określił numeru wiersza, w którym wystąpił ten błąd, ale podświetlił na czerwono całkowicie poprawną instrukcję przypisania zmiennej, wyrzucając mnie. Rzeczywista, zniekształcona instrukcja łańcuchowa (zawierająca wiele wierszy ze znakiem „\”) znajdowała się obok podświetlanej instrukcji. Może to pomoże komuś innemu.


2

W moim przypadku używam systemu Windows, więc zamiast apostrofów muszę używać podwójnych cudzysłowów.

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

2

Otrzymałem ten błąd w funkcji postgresql. Miałem długi kod SQL, który podzieliłem na wiele wierszy za pomocą \ dla lepszej czytelności. Jednak na tym polegał problem. Usunąłem wszystkie i utworzyłem je w jednej linii, aby rozwiązać problem. Używałem pgadmin III.


2

W moim przypadku z Mac OS X miałem następujące stwierdzenie:

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

Otrzymałem błąd:

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

Po zmianie na:

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

Zadziałało...

David


2

Możesz spróbować tego:

s = r'long\annoying\path'

1
To najlepsza odpowiedź. Można też spróbować s = r'long\annoying\path\\'.
shahar_m

1

Twoje variable(s1)obejmuje wiele linii. Aby to zrobić (tj. Chcesz, aby Twój ciąg obejmował wiele linii), musisz użyć potrójnych cudzysłowów ("" ").

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

1

W takim przypadku sprawdzą się trzy pojedyncze cudzysłowy lub trzy podwójne cudzysłowy! Na przykład:

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

LUB

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

0

Większość poprzednich odpowiedzi jest poprawnych, a moja odpowiedź jest bardzo podobna do aaronasterling, możesz też zrobić 3 pojedyncze cudzysłowy s1 = '' 'jakiś bardzo długi ciąg ............' ''


0

Napotkałem ten sam problem podczas uzyskiwania dostępu do dowolnego katalogu na dysku twardym. Potem rozwiązałem to w ten sposób.

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

wprowadź opis obrazu tutaj

Powyższy obrazek przedstawia błąd i rozwiązany wynik.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.