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 unicode
Type naar str
, de oude str
Type 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 2to3
gereedschap 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 unicode
Functie met String str
Functie.
if isinstance(unicode_or_str, str): ##Replaces with str
text = unicode_or_str
decoded = False
Antwoord 5
Men kan unicode
vervangen door u''.__class__
Om de ontbrekende unicode
Class 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