변수가 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를 반환한다.
'IT이야기' 카테고리의 다른 글
여러 Vuex 경로에서 데이터를 로드하려면 다중 사용 Vue 구성 요소를 어떻게 구성해야 하는가? (0) | 2022.03.24 |
---|---|
반응형 최초 발사를 탐지하는 방법 (0) | 2022.03.24 |
Python 인쇄에서 새 줄이나 공백을 추가하지 않도록 하는 방법 (0) | 2022.03.24 |
v-on="의 기능VueJS에서 구문 의미? (0) | 2022.03.24 |
데이터 테이블에서 "사용자 정의 필터" 프로펠러를 시각적으로 사용하는 방법또는 헤더로 필터링할 사용자 정의 필터를 만드는 방법 (0) | 2022.03.24 |