पायथन: सिंटैक्सएयर: स्ट्रिंग शाब्दिक स्कैन करते समय ईओएल


164

मेरे पास उपर्युक्त त्रुटि है s1="some very long string............"

क्या कोई जानता है कि मुझसे क्या गलती हो रही है?


1
क्या आप सुनिश्चित हैं कि यह सही ढंग से बंद हो रहा है और कहीं अनपेक्षित उद्धरण नहीं हैं?
क्वांटमसौप

अनपेक्षित उद्धरण एक और पार्सिंग त्रुटि फेंकते हैं।
JanC

जवाबों:


224

आप "लाइन के अंत से पहले नहीं डाल रहे हैं ।

"""यदि आप ऐसा करना चाहते हैं तो उपयोग करें :

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

17
और केवल तीन उद्धरण चिह्नों का उपयोग करने के लिए सावधान, मेरे पास दुर्घटना से चार थे और त्रुटि आई
ओरेगानो

1
कंक्रीटिंग स्ट्रिंग्स और वेरिएबल्स के बारे में क्या?
डैनियल स्प्रिंगर

92

मुझे यह समस्या थी - मैंने आखिरकार यह काम किया कि इसका कारण था कि मैं \पात्रों को स्ट्रिंग में शामिल करूँगा । यदि आपके पास इनमें से कोई भी है, तो उनके साथ "बच" जाएं \\और यह ठीक काम करना चाहिए।


2
@ क्या उन्हें 'एस्केप कैरेक्टर' कहा जाता है, और यह काफी मानक है। आप rउन्हें समस्याओं से बचने के लिए स्ट्रिंग से पहले रख सकते हैं ।
एरिक

17

(मान लें कि आपके पास स्ट्रिंग में लाइन ब्रेक नहीं है / चाहते हैं ...)

यह तार वास्तव में कितना लंबा है?

मुझे संदेह है कि एक फ़ाइल से या कमांडलाइन से पढ़ी जाने वाली लाइन कितनी देर तक हो सकती है, और क्योंकि लाइन के अंत में काट दिया जाता है कि पार्सर कुछ ऐसा देखता है जैसे s1="some very long string..........(बिना समाप्त हुए ") और इस तरह एक पार्सिंग त्रुटि फेंकता है?

आप इस तरह से अपने स्रोत में लाइनब्रेक से बचकर लंबी लाइनों को कई लाइनों में विभाजित कर सकते हैं:

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

8

मेरी स्थिति में, मेरे पास \r\nमेरे एकल-उद्धृत शब्दकोश तार थे। मैं के सभी उदाहरणों की जगह \rके साथ \\rऔर \nसाथ \\nहै और यह मेरी समस्या का समाधान हो, ठीक से eval'ed dict में भाग निकले पंक्ति विराम लौटने।

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

6

मैंने इसी तरह की समस्या का सामना किया। मेरे पास एक स्ट्रिंग थी जिसमें विंडोज जैसे एक फ़ोल्डर में पथ था C:\Users\। समस्या यह है कि \एक भागने का चरित्र है और इसलिए इसे तार में उपयोग करने के लिए आपको एक और जोड़ने की आवश्यकता है\

गलत: C:\Users\

सही बात: C:\\\Users\\\


4

मुझे भी यह समस्या थी, हालाँकि यहाँ उत्तर थे, मैं इसके लिए एक महत्वपूर्ण बिंदु चाहता हूं कि /खाली स्थान नहीं होना चाहिए।


2

मेरे पास यह सटीक त्रुटि संदेश भी था, मेरे लिए समस्या "\" को जोड़कर तय की गई थी

यह पता चला है कि मेरी लंबी स्ट्रिंग, बहुत अंत में "\" के साथ लगभग आठ लाइनों में टूट गई थी, एक लाइन पर "\" गायब थी।

पायथन आईडीएल ने एक पंक्ति संख्या निर्दिष्ट नहीं की थी जो यह त्रुटि थी, लेकिन इसने पूरी तरह से सही चर असाइनमेंट स्टेटमेंट को लाल कर दिया, मुझे फेंक दिया। वास्तविक मिहापेन स्ट्रिंग स्टेटमेंट ("\" के साथ लंबी लाइनें) स्टेटमेंट पर प्रकाश डाला जा रहा था। शायद यह किसी और की मदद करेगा।


2

मेरे मामले में, मैं विंडोज का उपयोग करता हूं इसलिए मुझे सिंगल के बजाय दोहरे उद्धरण चिह्नों का उपयोग करना होगा।

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

2

मुझे यह त्रुटि postgresql फ़ंक्शन में मिल रही थी। मेरे पास एक लंबी एसक्यूएल थी जिसे मैंने बेहतर पठनीयता के लिए कई लाइनों में तोड़ दिया। हालाँकि, यह समस्या थी। मैंने सभी को हटा दिया और उन्हें समस्या को ठीक करने के लिए एक पंक्ति में बना दिया। मैं pgadmin III का उपयोग कर रहा था।


2

मैक ओएस एक्स के साथ मेरे मामले में, मेरे पास निम्नलिखित कथन था:

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

मुझे त्रुटि मिल रही थी:

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

मेरे बदलने के बाद:

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

इसने काम कर दिया...

डेविड


2

आप यह कोशिश कर सकते हैं:

s = r'long\annoying\path'

1
यह सबसे अच्छा जवाब है। भी आजमा सकते हैं s = r'long\annoying\path\\'
शाहर_म

1

आपकी variable(s1)कई पंक्तियाँ। ऐसा करने के लिए (यानी आप चाहते हैं कि आपकी स्ट्रिंग कई पंक्तियों में फैले), आपको ट्रिपल उद्धरण ("" ") का उपयोग करना होगा।

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

1

इस मामले में, तीन एकल उद्धरण या तीन दोहरे उद्धरण दोनों काम करेंगे! उदाहरण के लिए:

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

या

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

0

अधिकांश पिछले उत्तर सही हैं और मेरा उत्तर बहुत ही अनारोस्टरलिंग के समान है, आप 3 सिंगल कोटेशन s1 = '' 'कुछ बहुत लंबी स्ट्रिंग ............' '' भी कर सकते हैं।


0

किसी भी हार्ड ड्राइव डायरेक्टरी को एक्सेस करते समय मुझे उसी समस्या का सामना करना पड़ा। फिर मैंने इसे इस तरह से हल किया।

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

यहां छवि विवरण दर्ज करें

ऊपर दी गई तस्वीर एक त्रुटि और हल किए गए आउटपुट को दिखाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.