source

Python 객체가 문자열인지 확인하는 방법

itover 2023. 1. 5. 20:28
반응형

Python 객체가 문자열인지 확인하는 방법

Python 객체가 문자열(일반 또는 Unicode)인지 확인하려면 어떻게 해야 합니까?

파이썬 2

isinstance(obj, basestring)obj.

문서

파이썬 3

3.x Python 3.x 의 basestring는 더 이상 할 수 .str유형입니다( 2의 ).unicode를 참조해 주세요.

따라서 Python 3.x의 체크는 다음과 같습니다.

isinstance(obj_to_test, str)

이것은 관원의 결정에 따른다.2to3:: " " "basestring로로 합니다.str.

파이썬 2

「」의 한다.o입니다.

isinstance(o, basestring)

다 하기 str ★★★★★★★★★★★★★★★★★」unicodebasestring.

타입이 다음 중 하나인지 확인하려면o는 로로그그 is이다.str:

type(o) is str

o의 예다.str ""의 "str:

isinstance(o, str)

의 내용은 Unicode 을 Unicode Unicode로 치환하는 할 수 .strunicode.

그러나 명시적 유형 확인을 수행할 필요가 없을 수도 있습니다."Duck Typing"은 당신의 필요에 맞을 수 있습니다.http://docs.python.org/glossary.html#term-duck-typing 를 참조해 주세요.

참고 항목: python에서 유형을 확인하는 표준 방법은 무엇입니까?

파이썬 2 및 3

(호환성)

Python 버전(2.x vs 3.x)에 관계없이 체크하고 싶은 경우 (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

반복 가능 또는 반복자를 통해 반복되지 않으며 문자열 목록을 호출하지 않으며 문자열과 유사한 문자열을 문자열로 올바르게 감지합니다.

물론 단점도 있다.를 들어, 「」라고 하는 것은,str(maybe_string)엄청난 계산일 수도 있습니다.자주 그렇듯이, 은 상황에 따라 다릅니다.

편집: 코멘트에서 @Tcll이 지적하고 있듯이, 실제로는 유니코드 문자열과 바이테스트링을 모두 검출하는 방법을 묻습니다.Python 2에서는 ASC가 아닌 유니코드 문자열에 대한 예외와 함께 이 답변이 실패합니다.II 문자, Python 3에서는 반환됩니다.False테스트링을 하다

변수가 다음 중 하나인지 확인하려면 다음과 같이 하십시오.

s='Hello World'
if isinstance(s,str):
#do something here,

저항 출력에 따라 조정할 수 있도록 부울 True 또는 False 값이 표시됩니다.처음에 type을 사용하여 값의 예상 약자를 확인할 수 있습니다. 그러면 Isistance 함수에서 사용할 수 있도록 'str'를 입력합니다.

간단히 말하면, 다음 코드를 사용합니다(우리는 언급된 오브젝트가 obj라고 가정합니다).

if type(obj) == str:
    print('It is a string')
else:
    print('It is not a string.')

다른 사람들이 말하는 것처럼 오리타이어 방식으로 이 문제를 해결할 수 있을 것 같습니다.끈이 진짜 끈인지 어떻게 알죠? 당연히 끈으로 변환해서죠!

def myfunc(word):
    word = unicode(word)
    ...

arg가 이미 문자열 또는 Unicode 유형인 경우 real_word는 해당 값을 변경하지 않고 유지합니다.전달된 객체가 구현된 경우__unicode__method. 유니코드 표현을 얻기 위해 사용됩니다.전달된 개체를 문자열로 사용할 수 없는 경우unicodebuilt-in은 예외를 발생시킵니다.

isinstance(your_object, basestring)

오브젝트가 실제 문자열 유형일 경우 True가 됩니다.str'은 예약어입니다.

죄송합니다.정답은 유니코드 스트링뿐만 아니라 유니코드 스트링을 포함하기 위해 'str' 대신 'basestring'을 사용하는 것입니다.다른 응답자 중 한 명이 위에서 언급한 바와 같습니다.

오늘 저녁, 나는 내가 생각하기에 내가 그것에 대해 확인해야 할 상황에 부딪쳤다.str타이핑은 했는데 알고 보니 안 했어요

저의 문제 해결 방법은 많은 상황에서 효과가 있을 수 있으므로, 이 질문을 읽는 다른 사람이 관심을 가질 경우를 대비해 아래에 제안합니다(Python 3에만 해당).

# NOTE: fields is an object that COULD be any number of things, including:
# - a single string-like object
# - a string-like object that needs to be converted to a sequence of 
# string-like objects at some separator, sep
# - a sequence of string-like objects
def getfields(*fields, sep=' ', validator=lambda f: True):
    '''Take a field sequence definition and yield from a validated
     field sequence. Accepts a string, a string with separators, 
     or a sequence of strings'''
    if fields:
        try:
            # single unpack in the case of a single argument
            fieldseq, = fields
            try:
                # convert to string sequence if string
                fieldseq = fieldseq.split(sep)
            except AttributeError:
                # not a string; assume other iterable
                pass
        except ValueError:
            # not a single argument and not a string
            fieldseq = fields
        invalid_fields = [field for field in fieldseq if not validator(field)]
        if invalid_fields:
            raise ValueError('One or more field names is invalid:\n'
                             '{!r}'.format(invalid_fields))
    else:
        raise ValueError('No fields were provided')
    try:
        yield from fieldseq
    except TypeError as e:
        raise ValueError('Single field argument must be a string'
                         'or an interable') from e

일부 테스트:

from . import getfields

def test_getfields_novalidation():
    result = ['a', 'b']
    assert list(getfields('a b')) == result
    assert list(getfields('a,b', sep=',')) == result
    assert list(getfields('a', 'b')) == result
    assert list(getfields(['a', 'b'])) == result

빈 문자열로 연결하여 테스트할 수 있습니다.

def is_string(s):
  try:
    s += ''
  except:
    return False
  return True

편집:

목록에 실패했다고 지적한 후 답변 수정

def is_string(s):
  return isinstance(s, basestring)

제 생각에 만약 그 결과물의 최종적인 특징이repr()는 입니다.'또는"그게 뭐든 간에 일종의 끈으로 여겨질 겁니다

def isStr(o):
    return repr(o)[-1] in '\'"'

라고 추측합니다.repr너무 무거운 걸 하지 않고 적어도 한 글자의 줄을 돌려줄 거예요.빈 문자열은 다음과 같은 방법으로 지원할 수 있습니다.

repr(o)[-1:].replace('"', "'") == "'"

하지만 그건 여전히repr문자열이 반환됩니다.

if type(varA) == str or type(varB) == str:
    print 'string involved'

EDX - 온라인 코스 MITx: 6.00.1x Python을 사용한 컴퓨터 사이언스 입문 및 프로그래밍

Python 2.x와 3.x를 모두 사용할 수 있다는 장점이 있는 string-likes에 적합한 duckyping 접근법은 다음과 같습니다.

def is_string(obj):
    try:
        obj + ''
        return True
    except TypeError:
        return False

와이즈피시는 오리사슴과 가까웠는데, 그가 오리사슴으로 전환하기 전에.isinstance접근, 단,+=리스트에는 다른 의미가 있다+한다.

언급URL : https://stackoverflow.com/questions/1303243/how-to-find-out-if-a-python-object-is-a-string

반응형