programing

NameError: 글로벌 이름 'unicode'가 정의되지 않았습니다(Python 3).

goodsources 2023. 5. 11. 21:24
반응형

NameError: 글로벌 이름 'unicode'가 정의되지 않았습니다(Python 3).

나는 bidi라는 파이썬 패키지를 사용하려고 합니다.이 패키지의 모듈(algorithm.py )에는 패키지의 일부임에도 불구하고 오류가 발생하는 행이 있습니다.

다음은 라인입니다.

# 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에서 작동하도록 코드의 이 부분을 어떻게 다시 작성해야 합니까?또한 Python 3에서 bidi 패키지를 사용한 사람이 있다면 비슷한 문제를 발견했는지 알려주시기 바랍니다.고마웠어.

Python 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

자세한 내용은 Python 3 포팅 HOWTO를 참조하십시오.또한 레나트 레게브로의 Porting to Python 3: 심층 가이드, 무료 온라인도 있습니다.

마지막으로 중요한 것은 도구를 사용하여 이 도구가 코드를 어떻게 변환하는지 확인하는 것입니다.

만약 당신이 나처럼 python2와 3에서 스크립트를 계속 작동시켜야 한다면, 이것은 누군가에게 도움이 될 수 있습니다.

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

그리고 나서 예를 들어 할 수 있습니다.

foo = unicode.lower(foo)

6개의 라이브러리를 사용하여 Python 2와 3을 모두 지원할 수 있습니다.

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

하나는 대체할 수 있습니다.unicode와 함께u''.__class__실종된 사람들을 처리하기 위해unicodePython 3의 클래스입니다.Python 2와 3 모두에 대해 구성을 사용할 수 있습니다.

isinstance(unicode_or_str, u''.__class__)

또는

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

추가 처리에 따라 다음과 같은 결과를 고려합니다.

파이썬 3

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

파이썬 2

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

기본적으로 Python 3, Strear unicode를 사용하고 있기를 바랍니다. 교체하십시오.Unicode문자열을 사용한 함수Str기능.

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

타사 라이브러리에서 사용하는 경우unicode그리고 당신은 그들의 소스 코드를 변경할 수 없습니다, 다음 원숭이 패치는 사용할 수 있습니다.str대신에unicode모듈에서:

import <module>
<module>.unicode = str

당신은 이것을 python2 또는 python3에서 사용할 수 있습니다.

type(value).__name__ == 'unicode':

언급URL : https://stackoverflow.com/questions/19877306/nameerror-global-name-unicode-is-not-defined-in-python-3

반응형