python: SyntaxError: EOL trong khi quét chuỗi ký tự


164

Tôi có lỗi đã đề cập ở trên s1="some very long string............"

Có ai biết tôi đang làm gì sai không?


1
Bạn có chắc chắn rằng nó được đóng lại chính xác và không có trích dẫn nào không được giải thích ở đâu đó?
quantumSoup

Báo giá không được giải quyết ném một lỗi phân tích cú pháp khác.
JanC

Câu trả lời:


224

Bạn không đặt một "trước khi kết thúc dòng.

Sử dụng """nếu bạn muốn làm điều này:

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

17
Và cẩn thận khi chỉ sử dụng ba dấu ngoặc kép, tôi đã có bốn dấu hiệu tình cờ và lỗi đã xuất hiện
Oregano

1
Điều gì về nối chuỗi và biến?
Daniel Springer

92

Tôi đã có vấn đề này - cuối cùng tôi đã tìm ra lý do là tôi đã bao gồm các \ký tự trong chuỗi. Nếu bạn có bất kỳ thứ gì trong số này, hãy "thoát" chúng ra \\và nó sẽ hoạt động tốt.


2
@Leo họ được gọi là 'ký tự thoát' và điều này khá chuẩn. Bạn có thể đặt rtrước chuỗi để tránh chúng gây ra vấn đề.
eric

17

(Giả sử bạn không có / muốn ngắt dòng trong chuỗi của mình ...)

Chuỗi này thực sự dài bao nhiêu?

Tôi nghi ngờ có giới hạn về thời gian đọc một dòng từ tệp hoặc từ dòng lệnh, và bởi vì cuối dòng bị cắt, trình phân tích cú pháp sẽ thấy một cái gì đó như s1="some very long string..........(không có kết thúc ") và do đó gây ra lỗi phân tích cú pháp?

Bạn có thể chia các dòng dài thành nhiều dòng bằng cách thoát các ngắt dòng trong nguồn của bạn như thế này:

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

8

Trong tình huống của tôi, tôi đã có \r\ntrong chuỗi từ điển trích dẫn duy nhất của tôi. Tôi đã thay thế tất cả các trường hợp \rvới \\r\nvới \\nnó và nó đã khắc phục vấn đề của tôi, trả lại đúng các ngắt dòng đã thoát trong lệnh chính tả.

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

6

Tôi phải đối mặt với một vấn đề tương tự. Tôi đã có một chuỗi chứa đường dẫn đến một thư mục trong Windows, ví dụ: C:\Users\Vấn đề là đó \là một ký tự thoát và vì vậy để sử dụng nó trong chuỗi, bạn cần thêm một chuỗi \.

Sai: C:\Users\

Chính xác: C:\\\Users\\\


4

Tôi cũng có vấn đề này, mặc dù đã có câu trả lời ở đây tôi muốn đưa ra một điểm quan trọng cho vấn đề này sau khi /không nên có khoảng trống.


2

Tôi cũng đã có thông báo lỗi chính xác này, đối với tôi, sự cố đã được khắc phục bằng cách thêm "\"

Hóa ra chuỗi dài của tôi, được chia thành khoảng tám dòng có "\" ở cuối, bị thiếu "\" trên một dòng.

Python IDLE không chỉ định số dòng có lỗi này, nhưng nó đánh dấu màu đỏ một câu lệnh gán biến hoàn toàn chính xác, loại bỏ tôi. Câu lệnh chuỗi biến dạng thực tế (nhiều dòng dài với "\") liền kề với câu lệnh được tô sáng. Có lẽ điều này sẽ giúp người khác.


2

Trong trường hợp của tôi, tôi sử dụng Windows nên tôi phải sử dụng dấu ngoặc kép thay vì dấu ngoặc đơn.

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

2

Tôi đã nhận được lỗi này trong chức năng postgresql. Tôi đã có một SQL dài mà tôi đã chia thành nhiều dòng với \ để dễ đọc hơn. Tuy nhiên, đó là vấn đề. Tôi đã xóa tất cả và thực hiện chúng trong một dòng để khắc phục sự cố. Tôi đã sử dụng pgadmin III.


2

Trong trường hợp của tôi với Mac OS X, tôi đã có một tuyên bố sau:

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

Tôi đã nhận được lỗi:

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

Sau khi tôi đổi thành:

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

Nó đã làm việc...

David


2

Bạn có thể thử điều này:

s = r'long\annoying\path'

1
Đó là câu trả lời tốt nhất. Cũng có thể thử s = r'long\annoying\path\\'.
shahar_m

1

variable(s1)Kéo dài của bạn nhiều dòng. Để thực hiện điều này (tức là bạn muốn chuỗi của mình trải dài trên nhiều dòng), bạn phải sử dụng ba dấu ngoặc kép ("" ").

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

1

Trong trường hợp này, ba trích dẫn đơn hoặc ba trích dẫn kép cả hai sẽ hoạt động! Ví dụ:

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

HOẶC LÀ

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

0

Hầu hết các câu trả lời trước đều đúng và câu trả lời của tôi rất giống với aaronasterling, bạn cũng có thể thực hiện 3 trích dẫn đơn s1 = '' 'một số chuỗi rất dài ............' ''


0

Tôi đã phải đối mặt với cùng một vấn đề trong khi truy cập bất kỳ thư mục ổ cứng. Sau đó, tôi đã giải quyết nó theo cách này.

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

nhập mô tả hình ảnh ở đây

Hình trên cho thấy một lỗi và đầu ra được giải quyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.