সিনট্যাক্স এরর: ফাংশন '£' ফিরিয়ে দিলে ফাইলটিতে নন-এসসিআইআই অক্ষর '\ xa3' থাকে


284

বলুন আমার একটি ফাংশন আছে:

def NewFunction():
    return '£'

আমি এর সামনে পাউন্ড সাইন দিয়ে কিছু জিনিস মুদ্রণ করতে চাই এবং আমি যখন এই প্রোগ্রামটি চালানোর চেষ্টা করি তখন এটি একটি ত্রুটি ছাপায়, এই ত্রুটি বার্তাটি প্রদর্শিত হবে:

SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details

আমাকে কীভাবে আমার রিটার্ন ফাংশনে একটি পাউন্ড সাইন অন্তর্ভুক্ত করতে পারে তা আমাকে কেউ জানাতে পারেন? আমি মূলত এটি একটি ক্লাসে ব্যবহার করছি এবং এটি সেই '__str__'অংশের মধ্যে যা পাউন্ড চিহ্নটি অন্তর্ভুক্ত রয়েছে।


43
আপনি যে পিইপিটির সাথে লিঙ্ক করেছেন তা কি পড়েছেন? এটি সমস্যা কী এবং কীভাবে এটি ঠিক করা যায় তা বর্ণনা করে।
murgatroid99

2
"কেউ কীভাবে আমাকে জানাতে পারে যে আমি কীভাবে আমার ফেরতের কার্যক্রমে একটি পাউন্ড সাইন অন্তর্ভুক্ত করতে পারি" " ঠিক আছে, ত্রুটি বার্তাটি বলেছে " বিশদর জন্য পাইথন.আর / পেপস / পেপ-0263.html দেখুন"; সম্ভবত আপনি সেখানে শুরু করা উচিত?
কার্ল নচেটেল

5
@ মুরগাট্রয়েড৯৯ আপনি এবং টাইপ করার সময় আমি যা চেয়েছি তা এখানে অন্য ২ missing জন নিখোঁজ রয়েছে: হ্যাঁ অবশ্যই আমি পিইপিটি পড়ব। অসুবিধা স্তর: আমি ডকারের ধারকটির বিরুদ্ধে / বিন / শ চালানোর চেষ্টা করেছি। আমি পাইথন চালানোর চেষ্টা করছি না। সুতরাং সমস্ত পিইপি আমাকে বলতে যাচ্ছে যে কীভাবে পাইথন কোডটি ঠিক করবেন আমি চালানোর চেষ্টা করছি না এবং লিখছি না। আমি স্ট্যাকওভারফ্লো থেকে আরও প্রসঙ্গে আশা করছি, পরিবর্তে স্মাগনেস পেয়েছি ug :( আরও অনুসন্ধানে আসল উত্তরটি সক্রিয় করা হয়েছে: স্ট্যাকওভারফ্লো / প্রশ্ন / 38992850/… - দেখুন পিইপি কীভাবে সহায়তা করতে ঠিক শূন্য করেছে
মার্ক অ্যালেন

@ মারকএলেন - আপনার লিঙ্কিত উত্তরে ত্রুটি বার্তাটি ইঙ্গিত দেয় যে পাইথন "/ বিন / বাশ" ব্যাখ্যা করার চেষ্টা করছে - এটি অবশ্যই উপেক্ষা করা সহজ কিছু, তবে এই প্রশ্নের কোনও কিছুই ইঙ্গিত করে না যে এটি ডকার বা একটি ধারক দিয়ে করা উচিত, সুতরাং পরামর্শ আপনি যেমন এখানে পেয়েছেন তেমন আপনার সমস্যার জন্য প্রযোজ্য নয় - এটি স্মাগনেস নয়, এটি আপনার সমস্যার প্রসঙ্গ আছে, এটি এখানে উপস্থিত নেই।
তানন্তীশ

@ তানন্তিশ আমি যা বলেছিলাম তার পাশে আছি। আমি প্রশ্নে ত্রুটি পেয়েছি। লোকেদের দরকারী তথ্য দেওয়ার পরিবর্তে এটির সাথে দেখা হয়েছিল, "আপনি কি নিজের সাথে যুক্ত পিইপিটি পড়েছেন?" এবং, "ত্রুটি বার্তাটি বলেছে (দেখুন), সেখানে শুরু হওয়া উচিত?" <- এই প্রতিক্রিয়াগুলি সহায়ক নয়। আমরা কেন এই আলোচনা করছি তা আমি নিশ্চিত নই।
মার্ক অ্যালেন

উত্তর:


368

আমি পড়ার পরামর্শ দিচ্ছি যে পিইপি ত্রুটিটি আপনাকে দেয়। সমস্যাটি হ'ল আপনার কোডটি ASCII এনকোডিংটি ব্যবহার করার চেষ্টা করছে তবে পাউন্ড প্রতীকটি ASCII অক্ষর নয়। ইউটিএফ -8 এনকোডিং ব্যবহার করে দেখুন। আপনি # -*- coding: utf-8 -*-আপনার .py ফাইলের শীর্ষে রেখে শুরু করতে পারেন । আরও উন্নত হতে, আপনি আপনার কোডের স্ট্রিং ভিত্তিতে একটি স্ট্রিংতে এনকোডিংগুলিও সংজ্ঞায়িত করতে পারেন। তবে, আপনি যদি নিজের কোডটিতে পাউন্ড চিহ্নটি আক্ষরিক রাখার চেষ্টা করছেন, আপনার একটি এনকোডিং দরকার যা এটি পুরো ফাইলটির জন্য সমর্থন করে।


306

নিম্নলিখিত দুটি লাইন যুক্ত করা আমার .py স্ক্রিপ্টের শীর্ষে বসে আমার জন্য কাজ করেছিল (প্রথম লাইনটি প্রয়োজনীয় ছিল):

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

আমি একই সমস্যা পেয়েছি এবং আমার পাইথনটি 2.7.11। # -*- coding: utf-8 -*-ফাইলটির শীর্ষে দ্বিতীয় লাইন যুক্ত করার পরে , এটি সমস্যার সমাধান করেছে।
ইলনিং

2
প্রথম লাইনটি পিআই ফাইলকে * নিক্সে এক্সিকিউটেবল করা। এটি আসলে এই প্রশ্নের সাথে সম্পর্কিত নয়।
cmd

57

প্রথমে # -*- coding: utf-8 -*-ফাইলের শুরুতে লাইনটি যুক্ত করুন এবং তারপরে u'foo'আপনার সমস্ত অ-এএসসিআইআই ইউনিকোড ডেটা ব্যবহার করুন:

def NewFunction():
    return u'£'

অথবা পাইথন ২.6 থেকে পাওয়া যাদুটি এটিকে স্বয়ংক্রিয় করতে ব্যবহার করুন:

from __future__ import unicode_literals

12
আপনার যদি # -*- coding: utf-8 -*-আপনার ইউনিকোড স্ট্রিংগুলির সাথে উপস্থাপনের প্রয়োজন না হয়u
ড্যানিয়েল লি

@ প্ল্যাটস যদি এটি পরিবর্তনশীল হয় তবে কী হবে? একটি ফাইল পড়ে উদাহরণস্বরূপ? আমি ওভারিয়েবল ব্যবহার করতে পারি না, আমি কীভাবে এটি করব?
Skizo-ozᴉʞS

1
@ ড্যানিয়েলি বাদে এটি সত্য নয়। # -*- coding: utf-8 -*-এর পরে কাজ print 'błąd'হবে আবর্জনা আউটপুট print u'błąd'
প্রেজেমেক ডি

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

12

ত্রুটি বার্তা আপনাকে জানায় ঠিক কী হয়েছে। পাইথন দোভাষীকে নন-এএসসিআইআই অক্ষরের এনকোডিংটি জানতে হবে।

আপনি যদি ইউ +00 এ 3 ফিরে আসতে চান তবে আপনি বলতে পারেন

return u'\u00a3'

যা ইউনিকোড এস্কেপ ক্রমের মাধ্যমে খাঁটি ASCII এ এই চরিত্রটি উপস্থাপন করে। আপনি যদি আক্ষরিক বাইট 0xA3 সমন্বিত একটি বাইট স্ট্রিং ফিরে আসতে চান, এটি that's

return b'\xa3'

(যেখানে পাইথন 2 এ bঅন্তর্নিহিত; তবে অন্তর্নিহিতের চেয়ে সুস্পষ্টই ভাল)।

ত্রুটি বার্তায় লিঙ্কযুক্ত পিইপি আপনাকে পাইথনকে ঠিক কীভাবে বলতে হয় নির্দেশ দেয় "এই ফাইলটি খাঁটি এএসসিআইআই নয়; এখানে আমি ব্যবহার করছি এমন এনকোডিংটি রয়েছে"। যদি এনকোডিংটি ইউটিএফ -8 হয় তবে তা হবে

# coding=utf-8

বা Emacs- সামঞ্জস্যপূর্ণ

# -*- encoding: utf-8 -*-

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

এত কথায়, 7-বিট ASCII পরিসীমা (0x00-0x7F) এর বাইরে পাইথন বাইটের ক্রমটি কী স্ট্রিং উপস্থাপন করে তা অনুমান করতে পারে না এবং তাও করতে পারে না। https://tripleee.github.io/8bit#a3 বাইট 0xA3 এর 21 টি সম্ভাব্য ব্যাখ্যা দেখায় এবং এটি কেবল উত্তরাধিকার 8-বিট এনকোডিংগুলি থেকে; তবে এটি মাল্টি-বাইট এনকোডিংয়ের প্রথম বাইটও হতে পারে। তবে বাস্তবে, আমি অনুমান করব যে আপনি আসলে ল্যাটিন -১ ব্যবহার করছেন, সুতরাং আপনার উচিত should

# coding: latin-1

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

একটি সতর্কতামূলক: coding: latin-1ত্রুটি বার্তাটি অবশ্যই মুছে ফেলবে (কারণ এমন কোনও বাইট অনুক্রম নেই যা প্রযুক্তিগতভাবে এই এনকোডিংয়ে অনুমোদিত নয়), তবে কোডটি ব্যাখ্যা করা হলে পুরোপুরি ভুল ফলাফল তৈরি করতে পারে যদি প্রকৃত এনকোডিং অন্য কিছু হয়। আপনি যখন এনকোডিং ঘোষণা করবেন তখন আপনাকে অবশ্যই সত্যতার সাথে ফাইলের এনকোডিংটি জানতে হবে।


এই সদৃশ প্রশ্নের খনি আগের উত্তরের একটি অভিযোজন stackoverflow.com/a/50829958/874188
tripleee

পাইথন 3 উত্স ফাইলগুলির জন্য ইউটিএফ -8 এ ডিফল্ট, এবং আপনি সম্ভবত আজকাল যে কোনও উপায়ে UTF-8 ব্যবহার করা উচিত। utf8everywhere.org
ট্রিপল

8

স্ক্রিপ্টে নিম্নলিখিত দুটি লাইন যুক্ত করা আমার জন্য সমস্যাটি সমাধান করেছে।

# !/usr/bin/python
# coding=utf-8

আশা করি এটা সাহায্য করবে !


2

আপনি সম্ভবত পাইথন 2 ফাইল অনুবাদকের সাথে পাইথন 3 ফাইল চালানোর চেষ্টা করছেন। বর্তমানে (2019 হিসাবে), pythonউইন্ডোজ এবং বেশিরভাগ লিনাক্স বিতরণে উভয় সংস্করণ ইনস্টল হওয়ার পরে পাইথন 2-এ কমান্ড ডিফল্ট হয়।

তবে আপনি যদি সত্যই পাইথন 2 স্ক্রিপ্টে কাজ করছেন তবে এই পৃষ্ঠার সমাধানটিতে এখনও উল্লেখ করা হয়নি যে ফাইলটি ইউটিএফ -8 + বিওএম এনকোডিংয়ে পুনর্বার করা হবে, যা ফাইলটির শুরুতে তিনটি বিশেষ বাইট যুক্ত করবে, তারা স্পষ্টভাবে পাইথন দোভাষী (এবং আপনার পাঠ্য সম্পাদক) ফাইল এনকোডিং সম্পর্কে অবহিত করুন।

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