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.