HOWTO · Python

Python에서 변수가 None인지 확인하는 방법

Python 변수에 None이 들어 있는지 확인하는 방법과 각 검사 방식의 차이를 살펴봅니다.

이 페이지의 내용

Python의 None은 값이 없음을 나타냅니다. 0, False, 빈 문자열과는 서로 다른 값입니다. 변수가 None을 담고 있는지 확인하려면 value is None을 사용하고, 반대 조건은 value is not None으로 확인합니다.

Python에서 is 연산자로 변수가 None인지 확인하기

None은 싱글턴이므로 None 객체는 하나뿐입니다. is 연산자는 두 참조가 같은 객체를 가리키는지 확인하므로, None을 직접 검사할 때 권장되는 방법입니다. 다음 예제는 두 조건을 모두 보여 줍니다.

value = None

if value is None:
    print("The value is None")
else:
    print("The value is not None")

if value is not None:
    print("A value is present")
else:
    print("No value is present")
The value is None
No value is present

값이 있을 때만 다음 작업을 하려는 경우, 예를 들어 그 값의 메서드를 호출하기 전에 두 번째 형태를 사용하면 됩니다. 객체가 거짓으로 평가되더라도 이를 None으로 간주하지 않으므로, 항등성 검사는 None과 다른 거짓 값들을 구분합니다.

Python에서 isinstance() 함수로 변수가 None인지 확인하기

isinstance()는 객체가 지정한 형식에 속하는지 확인하고 불리언 값을 반환합니다. type(None)은 NoneType이므로 다음 식으로 해당 형식인지 검사할 수 있습니다.

value = None
print(isinstance(value, type(None)))
True

형식 검사가 특별히 필요한 경우에는 이 방법도 유효합니다. 다만 None인지 직접 확인할 때는 value is None이 더 간결하고 의도한 항등성 비교를 그대로 표현합니다.

Python에서 딕셔너리로 변수가 None인지 확인하기

딕셔너리의 키로 None을 사용할 수 있으므로, 특정 매핑에 그 키가 있는지 조회할 수 있습니다. 이는 제한된 조회 예시이며 임의의 변수를 검사하는 일반적인 방법은 아닙니다.

value = None
messages = {None: "The value is None"}

if value in messages:
    print(messages[value])
else:
    print("No matching key")
The value is None

이 조건은 value가 messages의 키와 일치하는지 묻습니다. 이 매핑에 None이 들어 있고 예제에서 그 용도로 사용했기 때문에 이 경우에만 값이 None인지 알 수 있습니다. 일반적인 변수 검사에는 is None을 사용하세요.

Python에서 try와 except 블록으로 변수가 None인지 확인하기

예외 처리는 None과 같은 값으로 연산을 수행할 때 실패할 수 있는 상황을 다루는 데 유용합니다. 변수 자체를 직접 검사하는 방법은 아닙니다. 예를 들어 None과 정수를 더하면 TypeError가 발생합니다. 관련 없는 문제를 숨길 수 있는 포괄적인 except 대신 예상하는 예외만 지정하세요. 예외 처리에 대한 자세한 내용은 Python의 try와 except 안내서를 참고할 수 있습니다.

value = None

try:
    result = value + 5
except TypeError:
    print("This operation needs a numeric value")
This operation needs a numeric value

이 패턴은 덧셈이 실패했을 때 대응합니다. 로직에서 변수가 None인지 판단해야 한다면 연산 전에 명시적으로 확인하세요.

Python에서 동등성(==) 연산자로 변수가 None인지 확인하기

value == None은 값을 비교하며, value가 None이면 True가 됩니다. 하지만 객체의 동등성 메서드는 사용자 지정 비교 동작을 정의할 수 있으므로, 동등성 비교는 None 싱글턴을 식별하는 가장 명확한 방법이 아닙니다. 0, False, "", [] 같은 일반적인 값은 None과 같지 않습니다. 불리언 문맥에서 False로 평가된다고 해서 그 값이 None인 것은 아닙니다. 이 경우에는 value is None을 권장합니다.

결론

Python 변수에 None이 들어 있는지 직접 확인하려면 value is None을 사용하고, 반대 조건이 필요하면 value is not None을 사용하세요. isinstance(value, type(None))은 형식을 확인할 때 쓸 수 있고, 딕셔너리 멤버십은 특정 매핑에 한해 적용됩니다. try/except는 예상되는 오류를 일으키는 연산을 처리하는 방법입니다. 이러한 차이를 알면 작성 중인 코드에 맞는 방법을 선택할 수 있습니다.