TypeError: 'NoneType' 개체는 Python에서 볼 수 있습니다.
가 입니까?TypeError: 'NoneType' object is not iterable
균평? 예:
for row in data: # Gives TypeError!
print(row)
은 의가를의미다니합의 합니다.data
이라None
.
오류 설명: '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.
없음 값을 가진 변수를 반복하면 실패합니다.
for a in None:
print("k") #TypeError: 'NoneType' object is not iterable
Python 메서드가 값을 반환하지 않으면 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
Guido는 사용만 한다고 말합니다.is
를 하다None
is
신원 확인에 더 강력합니다.평등 연산을 사용하지 마십시오. 평등 연산은 그 자체로 거품이 일 수 있습니다.Python의 코딩 스타일 지침 - PEP-008
어떤 유형도 교활하지 않으며 람다에서 몰래 들어갈 수 있습니다.
import sys
b = lambda x : sys.stdout.write("k")
for a in b(10):
pass #TypeError: 'NoneType' object is not iterable
NoneType은 올바른 키워드가 아닙니다.
a = NoneType #NameError: name 'NoneType' is not defined
의연의 None
문자열:
bar = "something"
foo = None
print foo + bar #TypeError: cannot concatenate 'str' and 'NoneType' objects
이게 무슨 일입니까?
Python의 인터프리터가 당신의 코드를 Pyc 바이트코드로 변환했습니다.Python 가상 시스템이 바이트 코드를 처리하고 없음을 포함하는 변수를 반복하는 루프 구조가 발생했습니다.은 작은다호수었다니습행되출여를 되었습니다.__iter__
없음에 대한 메서드입니다.
도 음없이 .__iter__
Python의 방이정의의있으로 Python상표시내용스알다려니줍을법되는템은이 을 알 수 . NoneType 는없음__iter__
방법.
이것이 파이썬의 오리 타입 이데올로기가 나쁜 것으로 여겨지는 이유입니다.프로그래머는 변수를 사용하여 완전히 합리적인 작업을 수행하고 런타임에 없음에 의해 오염됩니다. 파이썬 가상 머신은 계속하려고 시도하고 관련 없는 헛소리를 카펫 전체에 토해냅니다.
Java 또는 C++는 None이 발생할 때 수행할 작업을 정의하지 않았기 때문에 컴파일이 허용되지 않으므로 이러한 문제가 없습니다.Python은 예외적인 상황에서 작동할 것으로 예상할 수 없는 많은 일을 할 수 있게 함으로써 프로그래머에게 목을 매도록 많은 밧줄을 줍니다.Python은 Java 및 C++가 하는 것처럼 자신을 해치는 것을 막으려고 할 때 예스라고 말하는 예스맨입니다.
코드:for row in data:
메시지: 오류메:TypeError: 'NoneType' object is not iterable
그것은 어떤 대상에 대해 불평하고 있습니까?둘 중에 하나를 선택하면,row
그리고.data
for row in data
어느 것이 참을 만해야 합니까?.data
.
무슨 문제가 있습니까?data
의 종류는 그의종는류입니다.NoneType
..None
활자가 있음NoneType
.그렇게data is None
.
IDE에서 또는 예를 들어 삽입하여 이를 확인할 수 있습니다. print "data is", repr(data)
for
문, 다시 실행합니다.
다음에 해야 할 일을 생각해 보십시오."데이터 없음"은 어떻게 표현해야 합니까?우리는 빈 파일을 쓰나요?예외를 제기하거나 경고를 기록하거나 침묵을 유지합니까?
이 오류가 발생할 수 있는 또 다른 이유는 함수에서 반환되는 값과 동일한 값을 설정하고 있지만 실제로 반환되는 값을 잊어버린 경우입니다.
예:
def foo(dict_of_dicts):
for key, row in dict_of_dicts.items():
for key, inner_row in row.items():
Do SomeThing
#Whoops, forgot to return all my stuff
return1, return2, return3 = foo(dict_of_dicts)
반복 중 하나에서 행 변수가 없음인 경우에도 오류가 발생할 수 있기 때문에 이 오류를 발견하기가 조금 어렵습니다.추적을 발견하는 방법은 함수 내부가 아닌 마지막 줄에서 추적이 실패하는 것입니다.
함수에서 변수 하나만 반환하는 경우 오류가 발생할지 확신할 수 없습니다.오류가 의심됩니다. 이 경우 "NoneType' 개체는 Python에서 주목할 수 있습니다."는 실제로 "이봐요, 이 세 변수에 순서대로 할당하기 위해 반환 값을 반복하려고 하는데 None만 반복되도록 합니다."라는 의미입니다.
이는 데이터 변수가 없음(NoneType)을 전달하고 있음을 의미합니다. 즉, NoneType은 해당되지 않습니다.그래서 당신이 하려고 하는 것처럼 목록으로 볼 수 없습니다.
다음과 같은 인수를 사용하여 write_file을 호출합니다.
write_file(foo, bar)
그러나 'foo'를 올바르게 정의하지 않았거나 코드에 오타가 있어 빈 변수를 새로 만들어 전달하고 있습니다.
저에게 그것은 Python 3 모자 대신 Groovy 모자를 쓴 경우였습니다.
를 .return
▁def
기능.
몇 달 동안 파이썬 3을 본격적으로 코딩하지 않았습니다.루틴에서 평가된 마지막 진술이 그루비(또는 러스트) 방식에 따라 반환되고 있다고 생각했습니다.
스택 추적을 보고, 삽입하는 데 몇 번 반복했습니다.try: ... except TypeError: ...
코드를 통해 디버깅/디버깅을 차단하여 무엇이 잘못되었는지 파악합니다.
그 메시지에 대한 해결책은 확실히 나에게 오류가 튀어나오도록 만들지 않았습니다.
또한 사용 중인 Python 버전에 따라 다릅니다.제 경우에 문제가 되었던 python 3.6과 python 3.8에서 다음과 같은 다른 오류 메시지가 표시되었습니다.
- 파이썬 3.6
(a,b) = None Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not iterable
- 파이썬 3.8
(a,b) = None Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot unpack non-iterable NoneType object
왜냐하면 루프에 사용하는 동안 결과는 값의 집합이 아닌 하나의 값일 뿐이기 때문입니다.
pola.py
@app.route("/search")
def search():
title='search'
search_name = request.form.get('search')
search_item = User.query.filter_by(id=search_name).first()
return render_template('search.html', title=title, search_item=search_item )
search.search(검색)
{% for p in search %}
{{ p }}
search.search(수정)
<td>{{ search_item }}</td>
저는 데이터브릭스에 있는 판다들에게 이 오류가 있었습니다.
이 오류에 대한 해결책은 클러스터에 라이브러리를 설치하는 것이었습니다. 여기에 이미지 설명을 입력하십시오.
라는 뜻입니다.data
이라None
그것은 반복할 수 없습니다.추가or []
예외를 방지하고 아무것도 인쇄하지 않습니다.
for row in data or []: # no more TypeError!
print(row)
일부 이전 의견에 대한 크레딧입니다. 예외를 제기하는 것도 바람직한 동작이거나 부적절한 설정의 지표가 될 수 있음을 주의하십시오.
예외 없음이 표시되면 루프를 계속 진행합니다.
예:
a = None
if a is None:
continue
else:
print("do something")
이것은 DB 또는 Excel 파일에서 쉽게 찾을 수 있습니다.
언급URL : https://stackoverflow.com/questions/3887381/typeerror-nonetype-object-is-not-iterable-in-python
'programing' 카테고리의 다른 글
테이블에 명명된 검사 제약 조건 추가 (0) | 2023.06.12 |
---|---|
개인 클래스 메소드를 만드는 방법은 무엇입니까? (0) | 2023.06.12 |
C에서 **를 사용할 때의 차이점 (0) | 2023.06.12 |
업데이트된 수명 주기 후크의 Vuex 상태 업데이트 (0) | 2023.06.12 |
json과 오라클에서 작업 (0) | 2023.06.12 |