파이썬 2와 3 호환성을 가진 변수가 문자열인지 확인하는 방법
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
코드 시작 부분에서 시도해 볼 수 있습니다.
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")
유형 (문자열) == str
문자열이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
'development' 카테고리의 다른 글
CSS : 글 머리 기호와 글 머리 기호 사이의 제어 공간 (0) | 2020.06.02 |
---|---|
SQL Server Management Studio 기록에서 "서버 이름"항목을 제거하는 방법 (0) | 2020.06.02 |
Swift에서 고유 한 장치 ID를 얻는 방법은 무엇입니까? (0) | 2020.06.02 |
PostgreSQL 테이블이 이미 생성 된 후 UNIQUE 제약 조건을 추가 할 수 있습니까? (0) | 2020.06.02 |
git format-patch를 사용하여 커밋을 하나의 패치로 어떻게 스쿼시합니까? (0) | 2020.06.02 |