isinstance(x, str)
python-3.x에서 다음 을 사용할 수 있음을 알고 있지만 python-2.x의 문자열인지 확인해야합니다. 윌 isinstance(x, str)
파이썬 2.x에서의 예상대로 작동? 아니면 버전을 확인하고 사용해야 isinstance(x, basestr)
합니까?
특히 python-2.x에서 :
>>>isinstance(u"test", str)
False
python-3.x에는 없습니다. u"foo"
답변
2.x-and-3.x 호환 코드를 작성하는 경우 아마 다음과 같이 6 을 사용하고 싶을 것입니다 .
from six import string_types
isinstance(s, string_types)
답변
6과 같은 패키지에 의존하지 않고 내가 찾은 가장 간결한 방법은 다음과 같습니다.
try:
basestring
except NameError:
basestring = str
그런 다음 가장 일반적인 방식으로 Python 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()
하지만에 대한 호출을 따르는 것이 더 쉽다고 생각합니다 .
답변
future
라이브러리 (파이썬 2) 추가 호환 이름 이 수, 파이썬 3 쓰기 계속 . 간단하게 다음을 수행 할 수 있습니다.
from builtins import str
isinstance(x, str)
설치하려면 실행하십시오 pip install future
.
A와 주의 , 그것은 단지 지원 python>=2.6
, >=3.3
하지만보다 더 현대적인 six
전용되는, 사용하는 경우 권장python 2.5
답변
어쩌면 다음과 같은 해결 방법을 사용하십시오.
def isstr(s):
try:
return isinstance(s, basestring)
except NameError:
return isinstance(s, str)
답변
object.__class__
객체가 기본 문자열 유형인지 확인하려면을 호출하여 객체의 클래스를 가져올 수 있습니다 .
isinstance(object,"".__class__)
따옴표로 묶은 문자열이 파이썬 2에서 유니 코드로 표시되도록 코드 상단에 다음을 배치 할 수 있습니다.
from __future__ import unicode_literals