Python에서 NoneType을“테스트”하는 방법?


398

때로는 NoneType 값을 반환하는 메서드가 있습니다. 그렇다면 NoneType 인 변수에 어떻게 질문 할 수 있습니까? 예를 들어 if 메소드 를 사용해야 합니다.

if not new:
    new = '#'

나는 그것이 잘못된 길이라는 것을 알고 있으며, 내가 의미하는 바를 이해하기를 바랍니다.


나는 이것이 여기에 그리고
아마도

경우 None있는 유일한 가치를 당신의 방법의 반환 bool(returnValue)과 동일 False한 후, if not new:잘 작동해야한다. 이것은 내장 라이브러리에서 가끔 발생합니다. 예를 들어 re.matchNone 또는 진리 일치 객체를 반환합니다.
Kevin

또한 대한 내 대답을 참조 null하고 None파이썬에서 여기 .
Michael Ekoka

답변:


631

그렇다면 NoneType 인 변수에 어떻게 질문 할 수 있습니까?

is이런 연산자를 사용하십시오

if variable is None:

왜 이것이 작동합니까?

파이썬에서 None유일한 단일 객체 이므로 연산자를 NoneType사용 is하여 변수에 변수가 있는지 여부를 확인할 수 있습니다 None.

is문서 에서 인용 ,

연산자 isis not개체 식별을위한 테스트 : x is y경우에만, 사실 xy같은 객체입니다. x is not y역 진리 값을 산출합니다.

하나 개의 인스턴스 만있을 수 있기 때문에 None, is확인하는 좋은 방법이 될 것입니다 None.


말의 입에서 들으십시오

파이썬 코딩 스타일 가이드 라인 인용 -PEP-008 (Guido 자신이 공동 정의),

싱글에 대한 비교는 좋아 None항상 함께 할 수 있어야 is하거나is not , 결코 평등 연산자 .


그래서 == None와 의 차이점은 무엇 is None입니까?
NONAME

@NoName와 관련하여 None둘 다 비슷한 결과를 생성합니다.
thefourtheye

1
pandasDataFrame의 존재 여부를 비교하는 경우에는 작동하지 않습니다. type(df) is type(None)이를 위해 다음을 피하기 위해 사용 합니다.The truth value of a DataFrame is ambiguous
Marc Maxmeister


27

Alex Hall의 답변에isinstance 따라 수행 할 수도 있습니다 .

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance 또한 직관적이지만 라인이 필요하다는 합병증이 있습니다.

NoneType = type(None)

이는 같은 종류의 필요하지 않습니다 intfloat.


이후 당신은하지 하위 클래스 수 NoneType와 이후 None싱글은, isinstance감지하는 데 사용해서는 안 None- 허용 대답 말한대로 대신 당신이해야하고, 사용 is None또는 is not None.
Aaron Hall

18

Aaron Hall의 의견에서 지적한 바와 같이 :

이후 당신은하지 하위 클래스 수 NoneType와 이후 None싱글은, isinstance감지하는 데 사용해서는 안 None- 허용 대답 말한대로 대신 당신이해야하고, 사용 is None또는 is not None.


원래 답변 :

그러나 가장 간단한 방법 은 cardamom의 대답 외에도 추가 줄 이없는 것입니다.
isinstance(x, type(None))

그렇다면 NoneType 인 변수에 어떻게 질문 할 수 있습니까? if 메소드를 사용해야합니다

사용 isinstance()필요하지 않습니다 isif-statement를 :

if isinstance(x, type(None)): 
    #do stuff

추가 정보 설명서에 언급 된대로 한 문장
에서 여러 유형을 확인할 수도 있습니다 . 유형을 튜플로 작성하십시오.isinstance()

isinstance(x, (type(None), bytes))

1
이후 당신은하지 하위 클래스 수 NoneType와 이후 None싱글은, isinstance감지하는 데 사용해서는 안 None- 허용 대답 말한대로 대신 당신이해야하고, 사용 is None또는 is not None.
Aaron Hall

1
이 답변은 다음에 유용했습니다python 3.6.7
Santhosh Dhaipule Chandrakanth

@AaronHall 왜 사용 isinstance 해서는 안 됩니까? is선호해야한다는 것을 이해 하지만 isinstance 양식이 더 자연스럽게 느껴지는 경우가 있습니다 (한 번에 여러 유형을 확인하는 것과 같은 경우 isinstance(x, (str, bool, int, type(None)))). 그것은 단지 개인적인 취향입니까, 아니면 내가 모르는주의가 있습니까?
Conchylicultor

@Conchylicultor는 당신의 제안에 단점을 가지고 있습니다. 1. 전역 검색 type2. 다음 호출 3. 유형 검색 None-언제 None싱글 톤과 키워드입니다. 또 다른 단점 : 4. 이것은 매우 비표준이며 사람들이 귀하의 코드를 볼 때 눈썹을 올릴 것입니다. x is None보다 최적화 된 검사입니다. 나는 x is None or isinstance(x, (str, bool, int))제안 할 것이지만, 일반적이지 않은 유형에 대해 이런 종류의 유형 검사를 할 때 당신이하고있는 일에 대해 더 많이 생각할 것을 제안합니다.
Aaron Hall

4

이것이 질문에 대한 대답인지 확실하지 않습니다. 그러나 나는 이것이 알아내는 데 시간이 걸린다는 것을 알고 있습니다. 나는 웹 사이트를 반복하면서 갑자기 저자의 이름이 더 이상 존재하지 않았습니다. 그래서 확인 진술이 필요했습니다.

if type(author) == type(None):
     my if body
else:
    my else body

이 경우 작성자는 변수 일 None수 있으며 확인중인 모든 유형이 될 수 있습니다.


때문에 None싱글 톤, type감지하는 데 사용해서는 안 None대신이 허용 대답이 말한대로 수행하고 사용한다 - is Noneis not None.
Aaron Hall

2

파이썬 2.7 :

x = None
isinstance(x, type(None))

또는

isinstance(None, type(None))

==> 참


1
이후 당신은하지 하위 클래스 수 NoneType와 이후 None싱글은, isinstance감지하는 데 사용해서는 안 None- 허용 대답 말한대로 대신 당신이해야하고, 사용 is None또는 is not None.
Aaron Hall

오 그래! 감사 !
Pesko

0

이 예제가 도움이 되길 바랍니다)

print(type(None) # NoneType

변수 이름의 유형을 확인할 수 있습니다

#Example
name = 12 # name = None
if type(name) != type(None):
    print(name)
else:
    print("Can't find name")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.