오류 설명 : 'NoneType'오브젝트를 반복 할 수 없습니다
python2에서 NoneType은 None 유형입니다. Python3에서 NoneType은 None 클래스입니다. 예를 들면 다음과 같습니다.
>>> print(type(None)) #Python2
<type 'NoneType'> #In Python2 the type of None is the 'NoneType' type.
>>> print(type(None)) #Python3
<class 'NoneType'> #In Python3, the type of None is the 'NoneType' class.
값이 None 인 변수를 반복하면 실패합니다.
for a in None:
print("k") #TypeError: 'NoneType' object is not iterable
파이썬 메소드는 값을 반환하지 않으면 NoneType을 반환합니다.
def foo():
print("k")
a, b = foo() #TypeError: 'NoneType' object is not iterable
다음과 같이 NoneType에 대한 루핑 구문을 확인해야합니다.
a = None
print(a is None) #prints True
print(a is not None) #prints False
print(a == None) #prints True
print(a != None) #prints False
print(isinstance(a, object)) #prints True
print(isinstance(a, str)) #prints False
귀도는 신원 확인에 더 강력하기 때문에 is
확인 에만 사용한다고 말합니다 . 평등 연산을 사용하지 마십시오. 자체적으로 풍선 업 구현 염을 뱉을 수 있습니다. 파이썬 코딩 스타일 가이드 라인-PEP-008None
is
유형은 음흉하며 람다에서 몰래 들어올 수 있습니다.
import sys
b = lambda x : sys.stdout.write("k")
for a in b(10):
pass #TypeError: 'NoneType' object is not iterable
유형이 유효한 키워드가 아닙니다 :
a = NoneType #NameError: name 'NoneType' is not defined
연결 None
및 문자열 :
bar = "something"
foo = None
print foo + bar #TypeError: cannot concatenate 'str' and 'NoneType' objects
무슨 일이야?
파이썬의 인터프리터는 코드를 pyc 바이트 코드로 변환했습니다. 파이썬 가상 머신이 바이트 코드를 처리했으며, None을 포함하는 변수를 반복하는 루핑 구조가 발생했습니다. 조작은 __iter__
None 에서 메소드를 호출하여 수행되었습니다 .
None은 __iter__
메소드가 정의 되어 있지 않으므로 Python의 가상 머신은 그것이 보이는 것을 알려줍니다 __iter__
. NoneType에는 메소드 가 없습니다 .
이것이 파이썬의 오리 타이핑 이데올로기가 나쁜 것으로 간주되는 이유 입니다. 프로그래머는 변수로 완전히 합리적인 작업을 수행하고 런타임에 Python 가상 머신이 병사를 시도하고 카펫 전체에서 무관심한 무의미한 소리를 퍼 붓는 None에 의해 오염됩니다.
Java 또는 C ++에는 None이 발생할 때 수행 할 작업을 정의하지 않았기 때문에 이러한 프로그램을 컴파일 할 수 없기 때문에 이러한 문제가 없습니다. 파이썬은 프로그래머가 예외적 인 상황에서 작동하지 않을 수있는 많은 일을 할 수있게함으로써 자신에게 매달릴 수있는 많은 밧줄을 제공합니다. 파이썬은 예스맨으로, 자바 나 C ++처럼 자신을 해치지 않기 위해 예스 르를 말합니다.
None
시퀀스로 강제 변환 되면 완전히 무해한 빈 시퀀스를 생성해야합니다.