NameError: Global Name ‘Unicode’ is niet gedefinieerd – in Python 3

Ik probeer een python-pakket te gebruiken genaamd Bidi. In een module in dit pakket (algorithm.py) zijn er enkele lijnen die me fout geven, hoewel het deel uitmaakt van het pakket.

Hier zijn de regels:

# 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

en hier is het foutbericht:

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

Hoe moet ik dit deel van de code opnieuw schrijven, zodat het werkt in Python3?
Als iemand Bidi-pakket met Python 3 heeft gebruikt, laat het me weten of ze vergelijkbare problemen hebben gevonden of niet. Ik waardeer uw hulp.


Antwoord 1, Autoriteit 100%

Python 3 hernoemde de unicodeType naar str, de oude strType is vervangen door bytes.

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

Mogelijk wilt u de Python 3 porteren HOWTO voor meer dergelijke details. Er is ook Lennart Regebro’s Porting naar Python 3: een diepgaande gids , gratis online.

Laatste, maar niet in de laatste plaats, kunt u gewoon proberen de 2to3gereedschap Om te zien hoe dat de code voor u vertaalt.


Antwoord 2, Autoriteit 15%

Als u het script moet laten werken op Python2 en 3 zoals ik dat deed, kan dit iemand helpen

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

en kan dan gewoon doen, bijvoorbeeld

foo = unicode.lower(foo)

Antwoord 3, Autoriteit 9%

U kunt de zes bibliotheek om zowel Python 2 en 3:

ondersteunen

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

Antwoord 4

Ik hoop dat je Python 3 gebruikt,
Str is standaard Unicode, dus alsjeblieft
Vervang unicodeFunctie met String strFunctie.

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

Antwoord 5

Men kan unicodevervangen door u''.__class__Om de ontbrekende unicodeClass in Python 3. voor zowel Python 2 en 3 aan te pakken. , u kunt het construct

gebruiken

isinstance(unicode_or_str, u''.__class__)

of

type(unicode_or_str) == type(u'')

Afhankelijk van uw verdere verwerking, overweeg de verschillende uitkomst:

Python 3

>>> isinstance('text', u''.__class__)
True
>>> isinstance(u'text', u''.__class__)
True

Python 2

>>> isinstance(u'text', u''.__class__)
True
>>> isinstance('text', u''.__class__)
False

Other episodes