NameError: গ্লোবাল নাম 'ইউনিকোড' সংজ্ঞায়িত করা হয়নি - পাইথন 3 এ


136

আমি বিডি নামে একটি পাইথন প্যাকেজ ব্যবহার করার চেষ্টা করছি। এই প্যাকেজের একটি মডিউলে (অ্যালগরিদম.পি) কিছু লাইন রয়েছে যা আমাকে ত্রুটি দেয়, যদিও এটি প্যাকেজের অংশ is

লাইনগুলি এখানে:

# utf-8 ? we need unicode
if isinstance(unicode_or_str, unicode):
    text = unicode_or_str
    decoded = False
else:
    text = unicode_or_str.decode(encoding)
    decoded = True

এবং এখানে ত্রুটি বার্তা:

Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    bidi_text = get_display(reshaped_text)
  File "C:\Python33\lib\site-packages\python_bidi-0.3.4-py3.3.egg\bidi\algorithm.py",   line 602, in get_display
    if isinstance(unicode_or_str, unicode):
NameError: global name 'unicode' is not defined

কোডটির এই অংশটি কীভাবে পুনরায় লিখব যাতে পাইথন 3 এ কাজ করে? এছাড়াও যদি পাইথন 3 এর সাথে যদি কেউ বিড়ি প্যাকেজ ব্যবহার করে থাকে তবে দয়া করে তারা আমাকে অনুরূপ সমস্যা খুঁজে পেয়েছে কিনা তা আমাকে জানান। আমি তোমার সাহায্য কে সাধুবাদ জানাই.

উত্তর:


213

পাইথন 3 নতুন নামকরণ unicodeটাইপ str, পুরাতন strটাইপ দ্বারা প্রতিস্থাপিত করা হয়েছে bytes।

if isinstance(unicode_or_str, str):
    text = unicode_or_str
    decoded = False
else:
    text = unicode_or_str.decode(encoding)
    decoded = True

এই জাতীয় আরও তথ্যের জন্য আপনি পাইথন 3 পোর্টিং হাওটো পড়তে চাইতে পারেন । লেনার্ট রেজেব্রোর পোর্টিং টু পাইথন 3 এছাড়াও রয়েছে: একটি গভীর-নির্দেশিকা , বিনামূল্যে অনলাইন।

সর্বশেষে তবে অন্তত নয়, আপনি কীভাবে আপনার জন্য কোডটি অনুবাদ করে তা দেখার জন্য আপনি কেবল 2to3সরঞ্জামটি ব্যবহার করার চেষ্টা করতে পারেন ।


সুতরাং আমি কি লিখব: যদি আইসনস্ট্যান্স (ইউনিকোড_অর_স্ট্র, স্ট্র)? কীভাবে 'ইউনিকোড_আর_স্ট্রি'?
— টিজে 1

1
ভেরিয়েবলের নামটি এখানে খুব বেশি গুরুত্বপূর্ণ নয়; if isinstance(unicode_or_str, str)শুধু কাজ করা উচিত। পরিবর্তনশীল নামটির নামকরণ .চ্ছিক।
— মার্টিজন পিটারস

5
@ টিজে 1: নিশ্চিত করুন যে আপনি কোনও বন্ধ হওয়া বন্ধনী বা অন্য কোথাও সরিয়েছেননি। কোডটি কেবলমাত্র unicode প্রতিস্থাপনের সাথে ঠিকঠাকভাবে কাজ করা উচিত str।
— মার্টিজন পিটারস

আপনি ঠিক মার্তিজান, আমি অন্তর্ভুক্ত করতে ভুলে গেছি: আমার কোডে, সহায়তার জন্য ধন্যবাদ, এটি এখন কাজ করে।
— টিজে 1

আমি 2to3 সরঞ্জাম পছন্দ করি
— জি-রুহ

22

আমার মতো স্ক্রিপ্টটি পাইথন 2 এবং 3 তে কাজ করা দরকার থাকলে এটি কারওর পক্ষে সহায়তা করতে পারে

import sys
if sys.version_info[0] >= 3:
    unicode = str

এবং তারপর উদাহরণস্বরূপ করতে পারেন

foo = unicode.lower(foo)

1
এটি সঠিক ধারণা, দুর্দান্ত উত্তর। কেবল একটি বিবরণ যুক্ত sixকরতে, আপনি পাইথন 2/3 সামঞ্জস্যতা পরিচালনা করতে লাইব্রেরিটি ব্যবহার করছেন , আপনি এটি করতে পারেন: if six.PY3: unicode = strস্টাফের পরিবর্তে sys.version_info। পাইথন 3-এ ইউনিকোডকে অপরিশোধিত করা সম্পর্কিত লন্টার ত্রুটিগুলি রোধে এটি খুব সহায়ক, বিশেষ লিন্টার নিয়মের ছাড় ছাড়াই।
— ইলে

20

পাইথন 2 এবং 3 উভয় সমর্থন করতে আপনি ছয়টি গ্রন্থাগার ব্যবহার করতে পারেন :

import six
if isinstance(value, six.string_types):
    handle_string(value)

1

আশা করি আপনি পাইথন 3 ব্যবহার করছেন, Unicodeস্ট্রিং ডিফল্টরূপে ইউনিকোড, সুতরাং অনুগ্রহ করে স্ট্রিং Strফাংশনটি ফাংশনটি প্রতিস্থাপন করুন ।

if isinstance(unicode_or_str, str):    ##Replaces with str
    text = unicode_or_str
    decoded = False

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