python: SyntaxError: EOL saat memindai string literal


Jawaban:


224

Anda tidak meletakkan "sebelum akhir baris.

Gunakan """jika Anda ingin melakukan ini:

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

17
Dan hati-hati untuk hanya menggunakan tiga tanda kutip, saya memiliki empat secara tidak sengaja dan kesalahan muncul
Oregano

1
Bagaimana dengan rangkaian string dan variabel?
Daniel Springer

92

Saya memiliki masalah ini - saya akhirnya menemukan bahwa alasannya adalah karena saya memasukkan \karakter dalam string. Jika Anda memiliki semua ini, "lepas" mereka \\dan itu akan berfungsi dengan baik.


2
@ Leo, mereka disebut 'karakter pelarian', dan ini cukup standar. Anda dapat meletakkan rsebelum string untuk menghindari mereka menyebabkan masalah.
eric

17

(Dengan asumsi Anda tidak memiliki / ingin jeda baris dalam string Anda ...)

Berapa lama sebenarnya string ini?

Saya menduga ada batas berapa lama baris membaca dari file atau dari commandline bisa, dan karena akhir baris akan memotong parser melihat sesuatu seperti s1="some very long string..........(tanpa akhir ") dan dengan demikian melempar kesalahan parsing?

Anda dapat membagi garis panjang menjadi beberapa baris dengan keluar dari linebreak di sumber Anda seperti ini:

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

8

Dalam situasi saya, \r\nsaya menggunakan string kamus tunggal yang dikutip. Saya mengganti semua contoh \rdengan \\rdan \ndengan \\ndan itu memperbaiki masalah saya, dengan benar mengembalikan jeda baris yang lolos dalam dikte yang dievaluasi.

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

6

Saya menghadapi masalah yang sama. Saya punya string yang berisi path ke folder di Windows misalnya C:\Users\. Masalahnya adalah bahwa itu \adalah karakter melarikan diri dan untuk menggunakannya dalam string Anda perlu menambahkan satu lagi \.

Salah: C:\Users\

Benar: C:\\\Users\\\


4

Saya juga punya masalah ini, meskipun ada jawaban di sini saya ingin poin penting untuk ini setelah /tidak boleh ada ruang kosong. Berhati-hatilah


2

Saya juga memiliki pesan kesalahan ini, bagi saya masalahnya telah diperbaiki dengan menambahkan "\"

Ternyata string panjang saya, dipecah menjadi sekitar delapan baris dengan "\" di bagian paling akhir, kehilangan "\" pada satu baris.

Python IDLE tidak menentukan nomor baris di mana kesalahan ini terjadi, tetapi menyoroti merah pernyataan penugasan variabel yang benar-benar benar, membuat saya marah. Pernyataan string salah bentuk (beberapa baris panjang dengan "\") berdekatan dengan pernyataan yang sedang disorot. Mungkin ini akan membantu orang lain.


2

Dalam kasus saya, saya menggunakan Windows jadi saya harus menggunakan tanda kutip ganda bukan tunggal.

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

2

Saya mendapatkan kesalahan ini dalam fungsi postgresql. Saya punya SQL panjang yang saya pecah menjadi beberapa baris dengan \ untuk keterbacaan yang lebih baik. Namun, itulah masalahnya. Saya menghapus semua dan membuatnya dalam satu baris untuk memperbaiki masalah ini. Saya menggunakan pgadmin III.


2

Dalam kasus saya dengan Mac OS X, saya memiliki pernyataan berikut:

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

Saya mendapatkan kesalahan:

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

Setelah saya ganti ke:

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

Berhasil ...

David


2

Anda dapat mencoba ini:

s = r'long\annoying\path'

1
Itu jawaban terbaik. Bisa juga mencoba s = r'long\annoying\path\\'.
shahar_m

1

variable(s1)Rentang Anda beberapa baris. Untuk melakukan ini (yaitu Anda ingin string Anda span beberapa baris), Anda harus menggunakan tanda kutip tiga ("" ").

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

1

Dalam hal ini, tiga kutipan tunggal atau tiga kutipan ganda keduanya akan berfungsi! Sebagai contoh:

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

ATAU

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

0

Sebagian besar jawaban sebelumnya benar dan jawaban saya sangat mirip dengan aaronasterling, Anda juga bisa melakukan 3 kutipan tunggal s1 = '' 'beberapa string yang sangat panjang ............' ''


0

Saya telah menghadapi masalah yang sama saat mengakses direktori hard drive. Lalu saya memecahkannya dengan cara ini.

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

masukkan deskripsi gambar di sini

Gambar di atas menunjukkan kesalahan dan output yang diselesaikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.