IT이야기

변수가 python 2 및 3과 호환되는 문자열인지 확인하는 방법

cyworld 2022. 3. 24. 21:57
반응형

변수가 python 2 및 3과 호환되는 문자열인지 확인하는 방법

다음을 사용할 수 있다는 것을 알고 있다.isinstance(x, str)python-3.x에서 그러나 나는 python-2.x에서 끈이 있는지 확인해야 한다.isinstance(x, str)python-2.x에서 예상한 대로 작업하시겠습니까?아니면 버전 확인 및 사용 여부isinstance(x, basestr)?

특히, python-2.x에서는:

>>>isinstance(u"test", str)
False

그리고 python-3.x에는u"foo"

2.x- 및 3.x 호환 코드를 쓰는 경우 다음 6개를 사용하십시오.

from six import string_types
isinstance(s, string_types)

6가지 패키지에 의존하지 않고 내가 발견한 가장 간결한 접근법은 다음과 같다.

try:
  basestring
except NameError:
  basestring = str

그렇다면, 가장 일반적인 방법으로 파이톤 2의 문자열을 확인했다고 가정하면

isinstance(s, basestring)

이제 Python 3+에서도 작동할 것이다.

이건 어때, 모든 경우에 효과가 있는 거야?

isinstance(x, ("".__class__, u"".__class__))

조금 다시 쓴 @Lev Levitsky의 대답이다.

try:
    isinstance("", basestring)
    def isstr(s):
        return isinstance(s, basestring)
except NameError:
    def isstr(s):
        return isinstance(s, str)

try/except테스트는 한 번 수행된 다음 항상 작동하고 가능한 빨리 작동하는 함수를 정의한다.

편집: 사실, 우리는 전화할 필요도 없다.isinstance(); 우리는 단지 평가만 하면 된다.basestring그리고 우리가 어떤 것을 얻을 수 있는지 알아보자.NameError:

try:
    basestring  # attempt to evaluate basestring
    def isstr(s):
        return isinstance(s, basestring)
except NameError:
    def isstr(s):
        return isinstance(s, str)

내 생각에는 다음 통화로 따르는 것이 더 쉬울 것 같다.isinstance()그럼에도 불구하고

도서관은 (Python 2) 호환되는 이름을 추가하므로 Python 3을 계속 쓸 수 있다.간단히 다음을 수행할 수 있다.

from builtins import str
isinstance(x, str) 

설치하려면 실행만 하십시오.pip install future.

주의사항으로서, 그것은 오직 지지할 뿐이다.python>=2.6,>=3.3, 그러나 그것은 보다 현대적이다.six, 사용할 경우에만 권장됨

어쩌면 다음과 같은 해결 방법을 사용할지도 모른다.

def isstr(s):
    try:
        return isinstance(s, basestring)
    except NameError:
        return isinstance(s, str)

전화를 걸면 사물의 클래스를 얻을 수 있다.object.__class__개체가 기본 문자열 유형인지 확인하려면:

    isinstance(object,"".__class__)

그리고 인용문으로 둘러싸인 문자열이 python 2에서 유니코드로 되도록 코드 상단에 다음 사항을 넣을 수 있다.

    from __future__ import unicode_literals

코드 시작 시 사용 가능:

from __future__ import print_function
import sys
if sys.version[0] == "2":
    py3 = False
else:
    py3 = True
if py3: 
    basstring = str
else:
    basstring = basestring

코드 후반부:

anystring = "test"
# anystring = 1
if isinstance(anystring, basstring):
    print("This is a string")
else:
    print("No string")

조심해!파이톤 2에서는str그리고bytes본질적으로 동일하다.이것은 당신이 그 둘을 구별하려고 한다면 버그를 일으킬 수 있다.

>>> size = 5    
>>> byte_arr = bytes(size)
>>> isinstance(byte_arr, bytes)
True
>>> isinstance(byte_arr, str)
True

활자 == str.

문자열이면 true를 반환하고, 그렇지 않으면 false를 반환한다.

참조URL: https://stackoverflow.com/questions/11301138/how-to-check-if-variable-is-string-with-python-2-and-3-compatibility

반응형