পাইথন "সিনট্যাক্স এরিয়ার: ফাইলটিতে নন-এসসিআইআই অক্ষর '\ xe2'"


179

আমি কিছু অজগর কোড লিখছি এবং শিরোনামের মতো ত্রুটি বার্তাটি পাচ্ছি, এটি অনুসন্ধান থেকে চরিত্রের সেটটি করতে হবে।

এখানে লাইনটি ত্রুটির কারণ ঘটায়

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

এএনএসআই ASCII সেটটিতে কোন চরিত্রটি নেই তা আমি বুঝতে পারি না? তদ্ব্যতীত "e 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
আপনি যা পোস্ট করেছেন তাতে কোনও সমস্যা নেই; কাছাকাছি লাইন দেখুন।
kindall

একটি সম্পাদনা কিন্ডাল যুক্ত করেছেন, এই লাইনে কিছু দেখুন?
কেডেকার

3
আপনি কি মিউট্যান্টের পরামর্শটি চেষ্টা করেছেন? আপনার কাছে কি ফাইলের কোথাও "স্মার্ট কোটস" (বাঁকা এবং / অথবা কোণযুক্ত ধরণের) রয়েছে?
জন ওয়াই

2
এটির কারণ হতে পারে এমন একটি উদাহরণ হ'ল EN ড্যাশ ( - \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
ধন্যবাদ এটি অনেক সাহায্য করেছে! সনদটি কী / তা এখনও নিশ্চিত নয়। আমি নোটপ্যাডে কোড নিক্ষেপ করে এবং ASCII হিসাবে সংরক্ষণ করে এবং পরে আটকানো শেষ করেছি।
কেডেকার

আমি এটিরও মুখোমুখি হয়েছি, যা আমার মনে হয় কিছু অনুলিপি পেস্ট ইস্যুর কারণে হয়েছিল, যেখানে চরিত্রটি সম্পাদক (ভিম)-তে সাদা স্থান হিসাবে প্রদর্শিত হয়েছিল।
সামভিন

অজগরটি জানা দরকার হতে পারে যে এই জাতীয় চরিত্রগুলি কেবল একটি স্ট্রে বাইট নয়, কারণের জন্য রয়েছে। ক্রিস রেডফোর্ডের উত্তরে সমাধানটি দেখুন।
1414

7
আমার একই সমস্যা ছিল, অক্ষর \ xe2 একটি হাইফেনের অংশ ছিল "-" (\ xe2 \ x80 \ x93), তবে আসকি "-" এর চেয়ে সামান্য দীর্ঘ। কারণ আমি পাঠ্যটি ভিমে আটকে দিয়েছি, তবে এই আর হাইফেনের দিকে মনোযোগ দিই নি। পুরো গল্পের জন্য, আমি এই চরিত্রটি একটি ডাবল হাইফেন দিয়ে তৈরি করেছি - "উইকি পাঠ্যে (টেক্সটাইল ব্যবহার করে)
প্লাজমাবিন্টুরং

1
আমার একজন O'Donnell
অ্যাস্টোস্ট্রোফে

277

আপনি যদি কেবল ইউটিএফ -8 অক্ষর ব্যবহার করার চেষ্টা করছেন বা সেগুলি আপনার কোডটিতে রয়েছে কিনা সেদিকে খেয়াল না রাখলে আপনার .pyফাইলের শীর্ষে এই লাইনটি যুক্ত করুন

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

1
আমার জন্য এটি কাজ করে না। নীচে সর্বদা প্রদর্শিত ত্রুটি। সিনট্যাক্স এরর: 393 লাইনে /home/aslam/projects/deva_26nov/mylibrary/email_constants.py ফাইলের মধ্যে নন-ASCII অক্ষর '\ xe2', কিন্তু কোনও এনকোডিং ঘোষিত হয়নি; দেখতে python.org/peps/pep-0263.html বিস্তারিত জানার জন্য
আসলাম খান

2
এটি একটি নির্বাচিত উত্তর না কারণ আছে?
সিএফএফ

@ সিএইচএফ আমি প্রশ্নটি জিজ্ঞাসা করার 4 মাস পরে লিখেছিলাম :)
ক্রিস রেডফোর্ড

@ সিএফএফ কারণ এটি খুব সহায়ক হলেও, নির্বাচিত উত্তরগুলি "এএনএসআই এএসসিআইআই সেটটিতে কোন চরিত্রটি নয়?" এই প্রশ্নের উত্তর দেয়? উভয়ই উত্তম উত্তর এবং যদিও প্রথমটি সাধারণত সেই ক্ষেত্রে জিততে পারে।
আর্থার ডেন্ট

39

অথবা আপনি কেবল সহজভাবে ব্যবহার করতে পারেন:

# coding: utf-8

.py ফাইলের শীর্ষে


27

\ xe2 হ'ল '-' অক্ষর, এটি কিছু অনুলিপিতে উপস্থিত হয় এবং এটি পৃথক সমান চেহারা '-' ব্যবহার করে যা এনকোডিংয়ের ত্রুটির সৃষ্টি করে। সঠিক '-' (আপনার কীবোর্ড বোতাম থেকে) দিয়ে '-' (অনুলিপি পেস্ট থেকে) প্রতিস্থাপন করুন।


3
অনেক ধন্যবাদ ! আমার ক্ষেত্রে এটি "" "চরিত্রটি ছিল
পিট

23

ফাইলের অক্ষর এনকোডিং পরিবর্তন করুন,

সর্বদা আপনার কোডের শীর্ষে লাইন নীচে রাখুন

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

10

ওয়েব থেকে একটি মন্তব্য অনুলিপি করা এবং আটকানোর সময় আমারও একই ত্রুটি হয়েছিল

আমার জন্য এটি ছিল শব্দটির একক উদ্ধৃতি (')

আমি কেবল এটি মুছে ফেলেছি এবং এটি আবার টাইপ করেছি।


আমারও একই ত্রুটি হয়েছিল, তবে স্থানীয়ভাবে পরীক্ষার সময় এটি ভেঙে যায় এবং কাজ করে না। সার্ভারে চালিত হওয়ার পরে এটি সেই এনকোডিংয়ের ত্রুটি দেয়। মন্তব্যগুলি একক উক্তিটি utf-8 সংস্করণে প্রতিস্থাপন করতে হবে।
shivgre

8

যোগ করার পদ্ধতি # কোডিং = UTF-8 আপনার .py ফাইলের প্রথম লাইনে লাইন সমস্যাটি ঠিক করবো।

সমস্যাটি সম্পর্কে নীচের লিঙ্কটিতে সমস্যা এবং তার সমাধান সম্পর্কে আরও পড়ুন, নিবন্ধের সমস্যাটিতে এবং এর সমাধানটি সুন্দরভাবে বর্ণিত হয়েছে: https://www.python.org/dev/peps/pep-0263/


4

আমি আমার মন্তব্যে অক্ষরগুলির জন্য এই ত্রুটিটি পেয়েছি (নোট গ্রহণের উদ্দেশ্যে ওয়েব থেকে সামগ্রীটি অনুলিপি / আটকানো থেকে)।

পাঠ্য র‍্যাঙ্গেলারে সমাধান করার জন্য:

  1. পাঠ্যটি হাইলাইট করুন
  2. পাঠ্য মেনুতে যান
  3. "ASCII এ রূপান্তর করুন" নির্বাচন করুন

2
বিকল্পটি টেক্সট র‌্যাংগলারের পরবর্তী সংস্করণগুলিতে টেক্সট-> জ্যাপ গ্রিলিমিনে পরিবর্তন করা হয়েছে তবে এটি আমার জন্য কাজ করেছে :-)
থেমথোড

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> :

তবুও এটি প্রশ্নের প্রথম মন্তব্য থেকে শুরু করে, উত্তরটিতে ব্যাখ্যা রয়েছে। ধন্যবাদ
ওয়েবকোমার

3

আমার একই সমস্যা ছিল এবং এটি কেবল আমার ফাইলের শীর্ষে যুক্ত করেছি (পাইথন 3 এ আমার সমস্যা হয়নি তবে পাইথন 2 তেও করতে পারি)

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

2

স্ট্যাক ওভারফ্লোটি দেখার প্রায় আধা ঘন্টা পরে, এটি আমার উপর ছড়িয়ে পড়ে যে কোনও মন্তব্যে যদি একটি মাত্র উদ্ধৃতি "" "ব্যবহার করা হয় তবে ত্রুটিটি ঘটবে:

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

ট্রেসব্যাকটি দেখার পরে আমি আমার মন্তব্যে ব্যবহৃত একক উদ্ধৃতি সনাক্ত করতে সক্ষম হয়েছি।


2

যদি এটি কাউকে সহায়তা করে তবে আমার জন্য তা ঘটল কারণ আমি আমার অজগর ২.7 কমান্ড দিয়ে পাইথন ৩.৪ এ জ্যাঙ্গো বাস্তবায়ন চালানোর চেষ্টা করছিলাম


জ্যাঙ্গো ব্যবহার করছিল না, তবে এটি এখনও আমাকে সহায়তা করেছিল। আমি অজগর 3 ব্যবহার করে স্ক্রিপ্টটি লিখেছিলাম এবং পাইথন 2 দিয়ে এটি চালানোর চেষ্টা করেছিলাম যখন আমি এটি সঠিক সংস্করণ দিয়ে চালিয়েছি তখন ত্রুটি চলে গেল। ধন্যবাদ!
জাস্টব্লসম

1

আমি নীচে সহজ .Py কোড চলমান এই সঠিক সমস্যা ছিল:

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

উপরের ডিএসএমের কোডগুলি নীচে সরবরাহ করেছে:

1 'মুদ্রণ \ xe2 \ x80 \ x98 রূপান্তরটি \ xe2 \ x80 \ x99, sys.version'

সুতরাং সমস্যাটি হ'ল আমার পাঠ্য সম্পাদক জন ওয়াইয়ের পরামর্শ অনুসারে স্মার্ট উক্তি ব্যবহার করেছেন। পাঠ্য সম্পাদকের সেটিংস পরিবর্তন করার পরে এবং ফাইলটি পুনরায় খোলার / সংরক্ষণ করার পরে, এটি ঠিক কাজ করে।


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

যদি আপনি কী চরিত্রের কারণে এটি চিহ্নিত করতে চান যে সমস্যাযুক্ত ভেরিয়েবলটি কেবল একটি স্ট্রিংকে নির্ধারণ করে এবং এটি একটি আইপিথন কনসোলে মুদ্রণ করে।

আমার ক্ষেত্রে

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

আমার জন্য, সমস্যাটি আমার কোডটি ম্যাক নোটসে টাইপ করার পরে এবং তা ম্যাক নোটস থেকে অনুলিপি করে এবং আমার ফাইল তৈরির জন্য আমার ভিম সেশনে আটকানো হয়েছিল। এটি আমার একক উদ্ধৃতিগুলি বাঁকা টাইপের করে তুলেছে। এটি ঠিক করার জন্য আমি আমার ফাইলটি ভিমে খুললাম এবং আমার সমস্ত বাঁকানো একক উদ্ধৃতিগুলি সরল ধরণের সাথে প্রতিস্থাপন করেছি, কেবল একই চরিত্রটি সরিয়ে এবং টাইপ করে। এটি ম্যাক নোটস ছিল যা একই কী স্ট্রোকটি বাঁকা একক উদ্ধৃতি তৈরি করে।


0

আমি দীর্ঘদিন সমস্যাটি কী তা খুঁজে পেতে সক্ষম হয়েছি কিন্তু পরে বুঝতে পেরেছিলাম যে আমি ওয়েব থেকে "ইউটিসি -12: 00" একটি লাইন অনুলিপি করেছি এবং এতে হাইফেন / ড্যাশ সমস্যার কারণ হয়ে দাঁড়িয়েছে। আমি কেবল এটি আবার "-" লিখেছি এবং সমস্যাটি সমাধান হয়ে গেছে।

সুতরাং, কখনও কখনও অনুলিপিযুক্ত অনুলিপিগুলিও ত্রুটি দেয়। এই জাতীয় ক্ষেত্রে, কেবল অনুলিপিটি পেস্ট করা কোডটি লিখুন এবং এটি কার্যকর হয়। পুনরায় লেখার সময়, দেখে মনে হবে কিছু পরিবর্তন হয়নি তবে ত্রুটিটি চলে যাবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.