python: SyntaxError: EOL saat memindai string literal

164

Saya memiliki kesalahan yang disebutkan di atas pada s1="some very long string............"

Adakah yang tahu apa yang saya lakukan salah?

l --''''''---------------- '' '' '' '' '' ''
sumber
1
Apakah Anda yakin itu ditutup dengan benar dan tidak ada tanda kutip di suatu tempat?
quantumSoup
Kutipan tidak terhapus melempar kesalahan parsing lain.
JanC

Jawaban:

224

Anda tidak meletakkan "sebelum akhir baris.

Gunakan """jika Anda ingin melakukan ini:

""" a very long string ...... 
....that can span multiple lines
"""
aaronasterling
sumber
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.

Chris H.
sumber
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.....\
...\
...."
JanC
sumber
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'))
  .....
Nicolas Bouliane
sumber
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\\\

Ashish kulkarni
sumber
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

madhu131313
sumber
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.

pengguna12711
sumber
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
Aminah Nuraini
sumber
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.

Ram Dwivedi
sumber
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

us_david
sumber
2

Anda dapat mencoba ini:

s = r'long\annoying\path'
Zak
sumber
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............"""
Khandelwal-manik
sumber
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'''
Areeha
sumber
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 ............' ''

grepit
sumber
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.

Md.Rakibuz Sultan
sumber