파이썬 객체가 문자열 (일반 또는 유니 코드)인지 어떻게 확인할 수 있습니까?
답변
답변
파이썬 2
객체 o
가 문자열 유형의 하위 클래스의 문자열 유형 인지 확인하려면
isinstance(o, basestring)
모두 때문에 str
과 unicode
의 서브 클래스입니다 basestring
.
유형 o
이 정확한지 확인하려면 다음을 수행하십시오 str
.
type(o) is str
다음 o
의 인스턴스 str
또는 서브 클래스인지 확인하려면 다음을 수행하십시오 str
.
isinstance(o, str)
유니 코드 문자열에 대한 위 또한 작업 바꿀 경우 str
에 unicode
.
그러나 명시 적 유형 검사를 수행 할 필요는 없습니다. “Duck 타이핑”은 필요에 맞을 수 있습니다. http://docs.python.org/glossary.html#term-duck-typing을 참조 하십시오 .
답변
파이썬 3
Python 3.x에서는 유일한 문자열 유형 (Python 2.x의 시맨틱 포함)과 basestring
같이 더 이상 사용할 수 없습니다 .str
unicode
따라서 Python 3.x의 검사는 다음과 같습니다.
isinstance(obj_to_test, str)
이것은 다음 수정 공식의 2to3
변환 도구 : 변환 basestring
에 str
.
답변
파이썬 2와 3
(교차 호환)
Python 버전 (2.x 대 3.x)에 관계없이 확인하려면 six
( PyPI ) 및 해당 string_types
속성을 사용하십시오.
import six
if isinstance(obj, six.string_types):
print('obj is a string!')
내 six
(아주 가벼운 단일 파일 모듈), 단순히하고있어 이 :
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str
else:
string_types = basestring
답변
나는 이것보다 더 많은 것을 발견했다 pythonic
.
if type(aObject) is str:
#do your stuff here
pass
유형 오브젝트는 싱글이기 때문에, 있다 는 STR 유형에 개체를 비교 할 수 있습니다
답변
하나는 명시 적 유형 검사 (거기에서 멀리하고자하는 경우 입니다 검사가되는 문자열 프로토콜의 그것에서 멀리 좋은 이유), 아마 가장 안전한 부분 :
str(maybe_string) == maybe_string
그것은, 그것은리스트의-문자열 문자열을 호출하지 않습니다하지으로 반복 반복 가능 또는 반복자를 통해 것이며, 그것은 정확하게 감지 stringlike 문자열로합니다.
물론 단점이 있습니다. 예를 들어 str(maybe_string)
계산이 무거울 수 있습니다. 자주 대답은 에 달려 있습니다.
편집 : @Tcll 이 주석에서 지적했듯이 질문은 실제로 유니 코드 문자열과 바이트 문자열을 모두 감지하는 방법을 묻습니다. Python 2에서는 ASCII가 아닌 문자를 포함하는 유니 코드 문자열에 대한 예외 로이 답변이 실패하고 Python 3에서는 False
모든 바이트 문자열에 대해 반환 됩니다.
답변
변수가 어떤 것인지 확인하려면 다음과 같이하십시오.
s='Hello World'
if isinstance(s,str):
#do something here,
isistance의 출력은 부울 True 또는 False 값을 제공하므로 적절하게 조정할 수 있습니다. 다음을 사용하여 값의 예상 약어를 확인할 수 있습니다. type (s) isstance 함수에서 사용할 수 있도록 ‘str’유형을 반환합니다.