[python] 문자열이 비어 있는지 확인하는 방법?

파이썬에는 빈 문자열 변수와 같은 것이 있습니까?

if myString == string.empty:

그럼에도 불구하고 빈 문자열 값을 확인하는 가장 우아한 방법은 무엇입니까? ""빈 문자열을 확인하기 위해 매번 하드 코딩 을하는 것이 좋지 않습니다.



답변

빈 문자열은 “거짓”입니다. 이는 부울 컨텍스트에서 거짓으로 간주되므로 다음과 같이하면됩니다.

if not myString:

변수가 문자열임을 알고있는 경우이 방법이 선호됩니다. 변수가 다른 유형일 수도있는 경우을 사용해야합니다 myString == "". 부울 컨텍스트에서 잘못된 다른 값 에 대해서는 진실 값 테스트 문서를 참조하십시오 .


답변

에서 PEP 8 의에서 “권장 사항 프로그래밍”섹션 :

시퀀스 (문자열, 목록, 튜플)의 경우 빈 시퀀스가 ​​거짓이라는 사실을 사용하십시오.

따라서 다음을 사용해야합니다.

if not some_string:

또는:

if some_string:

그냥 순서가되어, 명확하게 평가False또는 True그들이 비어 있거나없는 경우 부울 맥락에서. 그들은는 동일하지FalseTrue.


답변

가장 우아한 방법은 다음과 같이 참인지 거짓인지 간단히 확인하는 것입니다.

if not my_string:

그러나 다음과 같은 이유로 공백을 제거 할 수 있습니다.

 >>> bool("")
 False
 >>> bool("   ")
 True
 >>> bool("   ".strip())
 False

그러나이 문자열이 어떤 종류의 유효성 검사를 통과했으며이 방법으로 테스트 할 수있는 문자열인지 확실하지 않은 경우에는이 부분에서 좀 더 명확해야합니다.


답변

벗기기 전에 테스트를하지 않을 것입니다. 또한 빈 문자열이 False (또는 Falsy)라는 사실을 사용합니다. 이 방법은 Apache의 StringUtils.isBlank 또는 Guava의 Strings.isNullOrEmpty 와 유사합니다.

이것은 문자열이 None 또는 Empty 또는 Blank인지 테스트하는 데 사용하는 것입니다.

def isBlank (myString):
    if myString and myString.strip():
        #myString is not None AND myString is not empty or blank
        return False
    #myString is None OR myString is empty or blank
    return True

그리고 문자열이 None NOR Empty NOR Blank가 아닌 경우 테스트와 정확히 반대입니다.

def isNotBlank (myString):
    if myString and myString.strip():
        #myString is not None AND myString is not empty or blank
        return True
    #myString is None OR myString is empty or blank
    return False

위 코드의 간결한 형태 :

def isBlank (myString):
    return not (myString and myString.strip())

def isNotBlank (myString):
    return bool(myString and myString.strip())


답변

나는 한 번 Bartek의 답변과 비슷한 것을 썼고 자바 스크립트에서 영감을 얻었습니다.

def is_not_blank(s):
    return bool(s and s.strip())

테스트:

print is_not_blank("")    # False
print is_not_blank("   ") # False
print is_not_blank("ok")  # True
print is_not_blank(None)  # False


답변

이 작업을 수행하는 유일한 확실한 방법은 다음과 같습니다.

if "".__eq__(myString):

다른 모든 솔루션에는 확인이 실패 할 수있는 가능한 문제 및 엣지 사례가 있습니다.

len(myString)==0메소드 myString를 상속 str하고 __len__()메소드를 대체 하는 클래스의 오브젝트 인 경우 실패 할 수 있습니다 .

마찬가지로 myString == ""myString.__eq__("")경우 실패 할 수 있습니다 myString무시 __eq__()하고 __ne__().

어떤 이유로 든 재정의 "" == myString하면 바보가됩니다 .myString__eq__()

myString is ""그리고 "" is myString동등합니다. myString실제로 문자열이 아니라 문자열의 하위 클래스 인 경우 모두 실패 합니다 (둘 다 반환 False). 또한 ID 확인이기 때문에 파이썬이 작동하는 유일한 이유는 파이썬이 문자열 풀링 (문자열 인턴이라고도 함)을 사용하여 문자열의 동일한 인스턴스를 사용하는 것입니다 (여기 : ‘= = ‘또는’is ‘는 때때로 다른 결과를 생성합니까? ). 그리고 ""CPython의 시작부터 인턴

신원 확인의 큰 문제는 문자열 인턴이 어떤 문자열이 인턴되어 있는지 표준화되어 있지 않다는 것입니다. 즉, 이론적으로 ""는 필요하지 않으며 구현에 따라 다릅니다.

실제로 속일 수없는 유일한 방법은 처음에 언급 한 방법입니다 "".__eq__(myString). 이것은 명시 적으로 __eq__()빈 문자열 의 메소드를 호출하기 때문에 myString의 메소드를 대체하여 속일 수 없으며의 하위 클래스와 제대로 작동합니다 str.

또한 객체가 __bool__()메서드를 재정의하면 문자열의 거짓에 의존하는 것이 작동하지 않을 수 있습니다 .

이것은 이론적 인 작업 일뿐 만 아니라 실제로 프레임 워크 및 라이브러리 서브 클래스 화 str를 사용하고 사용하여 myString is ""잘못된 출력을 반환 할 수 있기 때문에 실제 사용과 관련이 있을 수 있습니다.

또한 is문자열 풀링이 꽤 이상한 규칙을 따르기 때문에 때로는 올바르게 작동하지만 다른 시간에는 그렇지 않기 때문에 일반적으로 문자열을 사용 하는 것은 꽤 나쁜 함정입니다.

즉, 대부분의 경우 언급 된 모든 솔루션이 올바르게 작동합니다. 이 게시물은 대부분 학업입니다.


답변

비어 있거나 빈 문자열을 테스트하십시오 (짧은 방법).

if myString.strip():
    print("it's not an empty or blank string")
else:
    print("it's an empty or blank string")