파이썬에서 변수의 유형이 있는지 확인하는 방법이 있나요 string
처럼은 :
isinstance(x,int);
정수 값?
isinstance(True, int) is True
.
isinstance(x,str)
파이썬 3에서 정확합니다 (str은 기본 유형입니다).
파이썬에서 변수의 유형이 있는지 확인하는 방법이 있나요 string
처럼은 :
isinstance(x,int);
정수 값?
isinstance(True, int) is True
.
isinstance(x,str)
파이썬 3에서 정확합니다 (str은 기본 유형입니다).
답변:
파이썬 2.x에서는
isinstance(s, basestring)
basestring
및 의 추상 슈퍼 클래스 입니다 . 객체가 또는 의 인스턴스인지 테스트하는 데 사용할 수 있습니다 .str
unicode
str
unicode
Python 3.x에서 올바른 테스트는
isinstance(s, str)
이 bytes
클래스는 Python 3에서 문자열 유형으로 간주되지 않습니다.
unicode
객체 를 놓치게된다는 것입니다 . 문자열도 고려해야합니다. 유형 str
과 유형 모두 unicode
공통 기본 클래스 basestring
를 가지며 이것이 확인하려는 것입니다.
basestring = str
.
unicode
Python 2와 3 간의 호환성에 대한 권장 사항은 "six"라이브러리를 사용하는 것입니다. ( isintance(s, six.string_types)
나는 이것이 오래된 주제라는 것을 알고 있지만 Google에 처음으로 표시된 주제이며 만족스러운 답변을 찾지 못하면 나중에 참조 할 수 있도록 여기에 남겨 둘 것입니다.
six 는 이미이 문제를 다루는 Python 2 및 3 호환성 라이브러리입니다. 그런 다음 다음과 같은 작업을 수행 할 수 있습니다.
import six
if isinstance(value, six.string_types):
pass # It's a string !!
코드를 살펴보면 다음과 같습니다.
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str,
else:
string_types = basestring,
value_is_string = isinstance(value, str if sys.version_info[0] >= 3 else basestring)
, 여기서 >=
파이썬 4+ str
는 문자열 의 루트 클래스를 유지한다고 가정합니다 .
Python 3.x 또는 Python 2.7.6에서
if type(x) == str:
==
것은 PEP8에 의해 명시 적으로 권장되지 않으며, "단일적인"것으로 간주되는 것 외에도 몇 가지 단점 str
이 있습니다. 정확히 유형을 확인하고 str
서브 클래스를 명시 적으로 제외 시키 려면을 사용하십시오 type(x) is str
.
정수 및 문자열보다 많은 수를 확인하는 경우 유형 모듈도 있습니다. http://docs.python.org/library/types.html
types.StringTypes
.
아래의 더 나은 답변을 기준으로 편집하십시오. 약 3 개의 답변으로 내려 가서 밑줄의 차가움에 대해 알아보십시오.
오래된 대답 : Windows의 모든 COM 호출을 포함하여 여러 곳에서 얻을 수있는 유니 코드 문자열을 조심하십시오.
if isinstance(target, str) or isinstance(target, unicode):
isinstance()
또한 두 번째 인수로 튜플 을 사용합니다. 따라서 basestring
존재하지 않더라도을 사용할 수 있습니다 isinstance(target, (str, unicode))
.
unicode
과 같이 정의되지 않은 것으로 보입니다.NameError: name 'unicode' is not defined
이후 basestring
Python3에 정의되지 않은이 작은 트릭 코드가 호환되도록하는 데 도움이 될 수 있습니다
try: # check whether python knows about 'basestring'
basestring
except NameError: # no, it doesn't (it's Python3); use 'str' instead
basestring=str
그 후 Python2와 Python3 모두에서 다음 테스트를 실행할 수 있습니다
isinstance(myvar, basestring)
basestring = (str, bytes)
유니 코드를 포함한 파이썬 2/3
from __future__ import unicode_literals
from builtins import str # pip install future
isinstance('asdf', str) # True
isinstance(u'asdf', str) # True
type('foo')
있는 unicode
파이썬 2에서 기본적으로하고, 두 번째 메이크업은 str
인스턴스되고 unicode
. 그것들은 파이썬 2와 3에서 코드를 유효하게 만듭니다. 다시 한번 감사합니다!
또한 변수 유형이 특정 종류인지 확인하려면 변수 유형을 알려진 객체의 유형과 비교할 수 있습니다.
문자열의 경우 이것을 사용할 수 있습니다
type(s) == type('')
str
어떻게됩니까? str
2.x 에서 상속받지 않는 유니 코드 문자열은 어떻습니까? isinstance(s, basestring)
2.x 또는 isinstance(s, str)
3.x 에서 사용하십시오 .
isinstance()
하위 클래스 (문자열이기도하고 특수화 됨)를 허용하고, type('')
사용할 수있을 때 여분의 호출이 중복 str
되고 유형이 싱글 톤이므로 type(s) is str
더 효율적인 테스트가 될 것입니다.
여기에 다른 사람들이 제공하는 좋은 제안이 많이 있지만 교차 플랫폼 요약이 잘 보이지 않습니다. 다음은 모든 Python 프로그램에 적합합니다.
def isstring(s):
# if we use Python 3
if (sys.version_info[0] >= 3):
return isinstance(s, str)
# we use Python 2
return isinstance(s, basestring)
이 함수에서는 isinstance(object, classinfo)
입력이 str
Python 3 또는 basestring
Python 2 인지 확인하는 데 사용 합니다.
>=
입니다. 적어도 고려하십시오 .
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'
isinstance(a, str) or isinstance(a, unicode)
True를 반환
type(a) in [str, unicode]
True를 반환
다음은 이러한 요구 사항과 함께 Python 2와 Python 3을 모두 지원하는 답변입니다.
six
달성하려는 것을 숨기려는 경향이 있으므로 사용 하거나 유사한 compat 모듈을 사용하지 마십시오 .import sys
PY2 = sys.version_info.major == 2
# Check if string (lenient for byte-strings on Py2):
isinstance('abc', basestring if PY2 else str)
# Check if strictly a string (unicode-string):
isinstance('abc', unicode if PY2 else str)
# Check if either string (unicode-string) or byte-string:
isinstance('abc', basestring if PY2 else (str, bytes))
# Check for byte-string (Py3 and Py2.7):
isinstance('abc', bytes)
외부 라이브러리에 의존하지 않으려면 Python 2.7 이상 및 Python 3 ( http://ideone.com/uB4Kdc ) 모두에서 작동합니다 .
# your code goes here
s = ["test"];
#s = "test";
isString = False;
if(isinstance(s, str)):
isString = True;
try:
if(isinstance(s, basestring)):
isString = True;
except NameError:
pass;
if(isString):
print("String");
else:
print("Not String");
s = '123'
issubclass(s.__class__, str)
이것이 내가하는 방법입니다.
if type(x) == type(str()):
type(str())
매우 우회적 인 방법입니다 str
. 유형은 싱글 톤이므로 type(x) is str
더 효율적입니다. isinstance()
의 서브 클래스를 무시할만한 충분한 이유가 없다면 대신 사용해야합니다 str
.