NameError: वैश्विक नाम 'यूनिकोड' को परिभाषित नहीं किया गया है - पायथन 3 में


136

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

यहाँ लाइनें हैं:

# 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

मुझे इस कोड के भाग को दोबारा कैसे लिखना चाहिए ताकि यह Python3 में काम करे? इसके अलावा अगर किसी ने पायथन 3 के साथ बीड़ी पैकेज का उपयोग किया है, तो कृपया मुझे बताएं कि क्या उन्हें समान समस्याएं मिली हैं या नहीं। तुम्हारी सहायता सराहनीय है।

जवाबों:


214

अजगर 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 पोर्टिंग HOWTO को पढ़ना चाह सकते हैं । वहाँ भी है Lennart Regebro के पोर्टिंग टू पाइथन 3: एन-इन-गहराई गाइड , मुफ्त ऑनलाइन।

अंतिम लेकिन कम से कम, आप केवल यह देखने के लिए 2to3टूल का उपयोग करने का प्रयास कर सकते हैं कि यह आपके लिए कोड का अनुवाद कैसे करता है।


तो क्या मुझे लिखना चाहिए: यदि आइंस्टीन (यूनिकोड_ओर_स्ट्रस्ट, स्ट्र)? Un यूनिकोड_ओर_स्ट्रस्ट ’के बारे में कैसे?
TJ1

1
चर नाम यहाँ बहुत मायने नहीं रखता है; if isinstance(unicode_or_str, str)बस काम करना चाहिए। चर का नाम बदलना वैकल्पिक है।
मार्टिन पीटर्स

5
@ TJ1: सुनिश्चित करें कि आपने एक समापन कोष्ठक या कहीं और से कुछ नहीं हटाया। कोड के साथ ठीक से काम करना चाहिए बस unicode के साथ बदल दिया str
मार्टिन पीटर्स

आप सही मार्टिज़न हैं, मैं शामिल करना भूल गया: मेरे कोड में, मदद के लिए धन्यवाद, अब यह काम करता है।
TJ1

मुझे
जी-

22

अगर आपको पटकथा को python2 और 3 पर काम करने की आवश्यकता है जैसा कि मैंने किया, तो यह किसी की मदद कर सकता है

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

और फिर सिर्फ उदाहरण के लिए कर सकते हैं

foo = unicode.lower(foo)

1
यह सही विचार है, अच्छा जवाब है। केवल एक विवरण जोड़ने के लिए, यदि आप sixPython 2/3 संगतता को प्रबंधित करने के लिए लाइब्रेरी का उपयोग कर रहे हैं, तो आप इसे बना सकते हैं: सामान के if six.PY3: unicode = strबजाय sys.version_info। यह विशेष लिंटर नियम छूट की आवश्यकता के बिना, पायथन 3 में यूनिकोड से संबंधित लिंटर त्रुटियों को रोकने के लिए भी बहुत उपयोगी है।
ely

20

आप पायथन 2 और 3 दोनों का समर्थन करने के लिए छह लाइब्रेरी का उपयोग कर सकते हैं :

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

1

आशा है कि आप पायथन 3 का उपयोग कर रहे हैं, Str डिफ़ॉल्ट रूप से यूनिकोड हैं, इसलिए कृपया Unicodeफ़ंक्शन को स्ट्रिंग Strफ़ंक्शन से बदलें ।

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

2
@ @ उत्तर से बीसी को संरक्षित नहीं करता Python2 उपयोगकर्ताओं को पीछे छोड़ने या python3 को तोड़ने का कोई कारण नहीं है
MrMeses
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.