पायथन "सिंटैक्सएयर: गैर-एएससीआईआई चरित्र '\ xe2' फ़ाइल में"


179

मैं कुछ अजगर कोड लिख रहा हूं और मुझे शीर्षक के रूप में त्रुटि संदेश मिल रहा है, यह खोजने से लेकर चरित्र सेट के साथ क्या करना है।

यहां वह रेखा है जो त्रुटि का कारण बनती है

hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")

मैं यह पता नहीं लगा सकता कि ANSI ASCII सेट में कौन सा चरित्र नहीं है? इसके अलावा "\ xe2" की खोज इस बात की जानकारी नहीं देती कि कौन सा चरित्र किस रूप में दिखाई देता है। उस पंक्ति में कौन सा चरित्र समस्या पैदा कर रहा है?

मैंने इस मुद्दे के लिए कुछ सुधार भी देखे हैं लेकिन मुझे यकीन नहीं है कि किसका उपयोग करना है। क्या कोई स्पष्ट कर सकता है कि समस्या क्या है (अजगर ने यूनिकोड की व्याख्या तब तक नहीं की जब तक कि उसे ऐसा करने के लिए नहीं कहा गया?), और मैं इसे कैसे ठीक करूंगा?

संपादित करें: यहां त्रुटियों के पास सभी लाइनें हैं

def createLoadBalancer():
    conn = ELBConnection(creds.awsAccessKey, creds.awsSecretKey)
    hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
    lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])
    lb.configure_health_check(hc)
    return lb

63
# कोडिंग जोड़ें: फ़ाइल के शीर्ष पर utf-8।
म्यूटेंट

2
आपके द्वारा पोस्ट की गई कोई समस्या नहीं है; पास की लाइनों में देखें।
किंडल

एक संपादित प्रकार जोड़ा गया, उन पंक्तियों में कुछ भी देखें?
केडेकर

3
क्या आपने म्यूटेंट के सुझाव की कोशिश की? क्या आपके पास फ़ाइल में कहीं भी "स्मार्ट कोट्स" (घुमावदार और / या एंगल्ड) हैं?
जॉन वाई

2
एक उदाहरण जो इसका कारण हो सकता है वह है एक एन डीएएस ( - \xe2\x80\x93)
मार्टिन थोमा

जवाबों:


145

आप एक आवारा बाइट के चारों ओर तैर रहे हैं। आप इसे चलाकर पा सकते हैं

with open("x.py") as fp:
    for i, line in enumerate(fp):
        if "\xe2" in line:
            print i, repr(line)

जहां आपको "x.py"अपने कार्यक्रम के नाम से प्रतिस्थापित करना चाहिए । आपको लाइन नंबर और आपत्तिजनक लाइन दिखाई देगी। उदाहरण के लिए, उस बाइट को मनमाने ढंग से सम्मिलित करने के बाद, मुझे मिला:

4 "\xe2        lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])\n"

2
धन्यवाद इससे बहुत मदद मिली! अभी भी निश्चित नहीं है कि चार्टर क्या है / था। मैंने नोटपैड में कोड फेंकना और एएससीआईआई के रूप में बचत करना, और फिर चिपकाना समाप्त कर दिया।
केडेकर

मुझे इसका सामना करना पड़ा, जो मुझे लगता है कि कुछ कॉपी पेस्ट मुद्दे के कारण था, जहां संपादक (वीम) में चरित्र को व्हाट्सएप के रूप में दिखाया गया था।
4

अजगर को यह जानने की जरूरत हो सकती है कि इस तरह के पात्र एक कारण के लिए हैं और सिर्फ एक आवारा बाइट नहीं है। क्रिस रेडफोर्ड के जवाब में समाधान देखें।
10

7
मुझे एक ही समस्या थी, चरित्र \ xe2 एक हाइफ़न का हिस्सा था "-" (\ xe2 \ x80 \ x93), लेकिन एससीआई की तुलना में थोड़ा लंबा "-"। ऐसा इसलिए है क्योंकि मैंने पाठ को विम में चिपकाया है, लेकिन इस लंबे हाइफ़न पर ध्यान नहीं दिया। पूरी कहानी के लिए, मैंने इस चरित्र को एक डबल-हाइफ़न के साथ "-" एक विकी पाठ (कपड़ा का उपयोग करके) में
निर्मित किया

1
मेरा एक O'Donnell
प्रेरित

278

यदि आप केवल UTF-8 वर्णों का उपयोग करने का प्रयास कर रहे हैं या परवाह नहीं करते हैं कि वे आपके कोड में हैं, तो इस लाइन को अपनी .pyफ़ाइल के शीर्ष पर जोड़ें

# -*- coding: utf-8 -*-

1
मेरे लिए यह काम नहीं कर रहा है। हमेशा त्रुटि दिखा रहा है। SyntaxError: गैर- ASCII वर्ण '\ xe2' फाइल /home/aslam/projects/deva_26nov/mylibrary/email_constants.py पर लाइन 393 पर, लेकिन कोई एन्कोडिंग घोषित नहीं किया गया; देख python.org/peps/pep-0263.html जानकारी के लिए
असलम खान

2
वहाँ एक कारण यह एक चुना जवाब नहीं है?
cph

@ प्रश्न के ४ महीने बाद मैंने इसे लिखा :) :)
क्रिस रेडफोर्ड

@cph क्योंकि, यह बहुत मददगार है, इसलिए चुना गया उत्तर इस प्रश्न का उत्तर देता है कि "ANSI ASCC सेट में कौन सा वर्ण नहीं है?" दोनों हालांकि ठीक जवाब हैं और पहले वाला आमतौर पर उस मामले में जीतता है।
आर्थर डेंट

39

या आप बस इस्तेमाल कर सकते हैं:

# coding: utf-8

.py फ़ाइल के शीर्ष पर


27

\ xe2 '-' वर्ण है, यह कुछ कॉपी और पेस्ट में दिखता है जो एक अलग समान दिखने का उपयोग करता है '-' जो एन्कोडिंग त्रुटियों का कारण बनता है। '-' (कॉपी पेस्ट से) को सही '-' (आप कीबोर्ड बटन से) बदलें।


3
आपका बहुत बहुत धन्यवाद ! मेरे मामले में यह "" "चरित्र
pietà


10

वेब से एक टिप्पणी को कॉपी और पेस्ट करते समय मुझे वही त्रुटि थी

मेरे लिए यह शब्द में एक एकल उद्धरण (') था

मैंने इसे मिटा दिया और इसे फिर से टाइप किया।


मेरे पास एक ही त्रुटि थी, लेकिन स्थानीय रूप से परीक्षण करते समय यह टूट नहीं गया और काम किया। लेकिन जब सर्वर पर चला गया तो उस एन्कोडिंग त्रुटि को दे दिया। Utf-8 संस्करण के लिए टिप्पणियों के एकल उद्धरण को बदलना पड़ा।
शिवाग्रे

8

आपकी .py फ़ाइल की पहली पंक्ति में # कोडिंग = utf-8 लाइन जोड़ने से समस्या ठीक हो जाएगी।

कृपया नीचे दिए गए लिंक पर समस्या और उसके समाधान के बारे में अधिक पढ़ें, इस समस्या में और इसके समाधान का सुंदर वर्णन किया गया है: https://www.python.org/dev/peps/pep-0263/


4

मुझे अपनी टिप्पणियों में पात्रों के लिए यह त्रुटि मिली (वेब ​​से सामग्री को कॉपी / पेस्ट करने से लेकर नोटबंदी के उद्देश्यों के लिए)।

टेक्स्ट रैंगलर में हल करने के लिए:

  1. पाठ हाइलाइट करें
  2. पाठ मेनू पर जाएं
  3. "ASCII में कनवर्ट करें" चुनें

2
विकल्प को
Text-> zap

4

पीईपी 0263 के आधार पर - पायथन सोर्स कोड एनकोडिंग्स को परिभाषित करना

Python will default to ASCII as standard encoding if no other
encoding hints are given.

To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file, such as:

      # coding=<encoding name>

or (using formats recognized by popular editors)

      #!/usr/bin/python
      # -*- coding: <encoding name> -*-

or

      #!/usr/bin/python
      # vim: set fileencoding=<encoding name> :

अभी तक इसने पहली टिप्पणी से प्रश्न तक काम किया, उत्तर में स्पष्टीकरण शामिल है। धन्यवाद
WebComer

3

मेरे पास एक ही मुद्दा था और मैंने इसे अपनी फ़ाइल के शीर्ष पर जोड़ा (पायथन 3 में मुझे समस्या नहीं थी लेकिन पायथन 2 में करें

#!/usr/local/bin/python
# coding: latin-1

2

स्टैक ओवरफ्लो के माध्यम से देखने के लगभग आधे घंटे के बाद, यह मुझ पर dawned कि अगर एक टिप्पणी में "" "का उपयोग त्रुटि के माध्यम से होगा:

SyntaxError: Non-ASCII character '\xe2' in file

ट्रेसबैक देखने के बाद मैं अपनी टिप्पणी में इस्तेमाल किए गए एकल उद्धरण का पता लगाने में सक्षम था।


2

अगर यह किसी को भी मदद करता है, तो मेरे लिए यह हुआ क्योंकि मैं अजगर 3.4 में अपने अजगर एक्स कमांड के साथ एक Django कार्यान्वयन चलाने की कोशिश कर रहा था


Django का उपयोग नहीं कर रहा था, लेकिन इससे मुझे मदद मिली। मैंने पायथन 3 का उपयोग करते हुए स्क्रिप्ट लिखी और इसे अजगर के साथ चलाने की कोशिश की 2. जब मैं इसे सही संस्करण के साथ चला रहा था तो त्रुटि दूर हो गई। धन्यवाद!
JustBlossom

1

मेरे पास यह सटीक समस्या थी, जो नीचे दिए गए सरल .py कोड को चला रही थी:

import sys
print 'version is:', sys.version

उपरोक्त DSM का कोड निम्नलिखित है:

1 'प्रिंट \ xe2 \ x80 \ x98version \ xe2 \ x80 \ x99, sys.v2' है

इसलिए मुद्दा यह था कि मेरे टेक्स्ट एडिटर ने SMART QUOTES का इस्तेमाल किया, जैसा कि जॉन Y ने सुझाव दिया था। पाठ संपादक सेटिंग्स बदलने और फ़ाइल को फिर से खोलने / सहेजने के बाद, यह ठीक काम करता है।


1

मैं उस अजीब खिड़कियां एपॉस्ट्रैप को पार्स करने की कोशिश कर रहा हूं और यहां कई चीजों की कोशिश करने के बाद कोड स्निपेट है जो काम करता है।

def convert_freaking_apostrophe(self,string):

   try:
      issuer_rename = string.decode('windows-1252')
   except:
      issuer_rename = string.decode('latin-1')
   issuer_rename = issuer_rename.replace(u'’', u"'")
   issuer_rename = issuer_rename.encode('ascii','ignore')
   try:
      os.rename(directory+"/"+issuer,directory+"/"+issuer_rename)
      print "Successfully renamed "+issuer+" to "+issuer_rename
      return issuer_rename
   except:
      pass

#HANDLING FOR FUNKY APOSTRAPHE
if re.search(r"([\x90-\xff])", issuer):
   issuer = self.convert_freaking_apostrophe(issuer)

0

मेरे पास एक ही मुद्दा था लेकिन यह इसलिए था क्योंकि मैंने स्ट्रिंग को कॉपी किया था और चिपका दिया था। बाद में जब मैंने मैन्युअल रूप से स्ट्रिंग टाइप की तो यह गायब हो गई त्रुटि है।

मुझे -चिन्ह के कारण त्रुटि हुई । जब मैंने इसे मैन्युअल रूप से इनपुट करने के साथ बदल दिया तो -त्रुटि हल हो गई।

नकल का तार 10 + 3 * 5/(16 − 4)

मैन्युअल रूप से टाइप किया गया स्ट्रिंग 10 + 3 * 5/(16 - 4)

आप स्पष्ट रूप से देख सकते हैं कि दोनों हाइफ़न में थोड़ा अंतर है ।

मुझे लगता है कि यह अलग ओएस या शायद सिर्फ अलग सॉफ्टवेयर द्वारा उपयोग किए जाने वाले अलग स्वरूपण के कारण है।


0

मेरे लिए समस्या "" "कि प्रतीक के कारण उद्धरण में उत्पन्न हुई थी। जैसा कि मैंने एक पीडीएफ फाइल से कोड कॉपी किया था, यह उस त्रुटि का कारण बना। मैंने अभी इस "" "" "" को प्रतिस्थापित किया है।


0

यदि आप यह जानना चाहते हैं कि किस चरित्र के कारण यह समस्याग्रस्त चर स्ट्रिंग को असाइन करता है और इसे iPython कंसोल में प्रिंट करता है।

मेरे मामले में

In [1]: array = [[24.9, 50.5]​, [11.2, 51.0]]        # Raises an error

In [2]: string = "[[24.9, 50.5]​, [11.2, 51.0]]"     # Manually paste the above array here

In [3]: string
Out [3]: '[[24.9, 50.5]\xe2\x80\x8b, [11.2, 51.0]]' # Here they are!

0

मेरे लिए, समस्या मैक नोट्स में मेरे कोड को टाइप करने के कारण हुई और फिर इसे मैक नोट्स से कॉपी किया और अपनी फ़ाइल बनाने के लिए मेरे vim सेशन में पेस्ट किया। इसने मेरे एकल उद्धरणों को घुमावदार प्रकार का बना दिया। इसे ठीक करने के लिए मैंने अपनी फ़ाइल vim में खोली और अपने सभी घुमावदार सिंगल कोट्स को सीधे तरह से बदल दिया, बस एक ही चरित्र को हटाकर और हटाकर। यह मैक नोट्स था जिसने एक ही कुंजी स्ट्रोक को घुमावदार एकल उद्धरण का उत्पादन किया।


0

मुझे यह पता लगाने में असमर्थ था कि लंबे समय तक क्या समस्या है, लेकिन बाद में मुझे महसूस हुआ कि मैंने वेब से "UTC-12: 00" एक लाइन कॉपी की थी और इसमें हाइफ़न / डैश समस्या पैदा कर रहा था। मैंने इसे बस "-" फिर से लिखा और समस्या हल हो गई।

तो, कभी-कभी कॉपी पेस्ट की गई पंक्तियाँ भी त्रुटि देती हैं। ऐसे मामलों में, कॉपी पेस्ट किए गए कोड को फिर से लिखें और यह काम करता है। फिर से लिखने पर, ऐसा लगेगा कि कुछ भी नहीं मिला है, लेकिन त्रुटि दूर हो जाएगी।


-1

जब मैं एक समान समस्या है जब पाठ फ़ाइलों को पढ़ने मैं उपयोग ...

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