TypeError: 비순차적 반복
-
Python에서
TypeError: iteration over non-sequence
재생성 -
목록을 반복하여 Python에서
TypeError: iteration over non-sequence
수정 -
__iter__
를 사용하여 Python에서TypeError: iteration over non-sequence
오류 수정
함수나 작업이 부적절한 유형의 객체에 적용될 때 Python에서 TypeError
가 발생합니다. 예를 들어 정수 및 문자열 개체를 추가하면 TypeError
가 반환됩니다.
반복할 수 없는 객체를 반복하려고 하면 TypeError: iteration over non-sequence
오류가 발생합니다. 이 튜토리얼은 Python에서 TypeError: iteration over non-sequence
를 수정하는 방법을 알려줍니다.
Python에서 TypeError: iteration over non-sequence
재생성
이제 TypeError
의 원인을 이해했습니다. Python에서 iteration over non-sequence
오류를 다시 만들어 보겠습니다. Python 2에서 다음 스크립트를 실행하면 TypeError: iteration over non-sequence
가 제공됩니다.
class Book:
def __init__(self, name, author):
self.name = name
self.author = author
class Collection:
def __init__(self):
self.read = []
def add_book(self, name, author):
self.read.append(Book(name, author))
if __name__ == "__main__":
Books = Collection()
Books.add_book("Romeo and Juliet", "William Shakespeare")
Books.add_book("To Kill a Mockingbird", "Harper Lee")
for book in Books:
print(book.name)
여기서 우리는 그 안에 있는 read
목록 대신 Books
개체를 반복하려고 합니다. 결과적으로 Python 2에서 TypeError: iteration over non-sequence
를 제공합니다.
출력:
Traceback (most recent call last):
File "Main.py", line 17, in <module>
for book in Books:
TypeError: iteration over non-sequence
Python 3에서는 다음과 같은 결과를 얻을 수 있습니다.
Traceback (most recent call last):
File "Main.py", line 17, in <module>
for book in Books:
TypeError: 'Collection' object is not iterable
목록을 반복하여 Python에서 TypeError: iteration over non-sequence
수정
Books
는 개체이므로 Books
개체 내부의 목록을 반복해야 합니다. 이 경우 for book in Books.read
가 됩니다.
class Book:
def __init__(self, name, author):
self.name = name
self.author = author
class Collection:
def __init__(self):
self.read = []
def add_book(self, name, author):
self.read.append(Book(name, author))
if __name__ == "__main__":
Books = Collection()
Books.add_book("Romeo and Juliet", "William Shakespeare")
Books.add_book("To Kill a Mockingbird", "Harper Lee")
for book in Books.read:
print(book.name)
출력:
Romeo and Juliet
To Kill a Mockingbird
__iter__
를 사용하여 Python에서 TypeError: iteration over non-sequence
오류 수정
컨테이너에 반복자가 필요한 경우 __iter__
메서드가 사용됩니다. 컨테이너의 모든 개체를 반복할 수 있는 반복자 개체를 반환해야 합니다.
Books
는 Collection
의 인스턴스입니다. __iter__
메서드를 사용하여 Books
객체를 반복할 수 있습니다.
class Collection:
def __iter__(self):
return iter(self.read)
다음 블록에는 전체 스크립트가 포함되어 있습니다.
class Book:
def __init__(self, name, author):
self.name = name
self.author = author
class Collection:
def __init__(self):
self.read = []
def add_book(self, name, author):
self.read.append(Book(name, author))
def __iter__(self):
return iter(self.read)
if __name__ == "__main__":
Books = Collection()
Books.add_book("Romeo and Juliet", "William Shakespeare")
Books.add_book("To Kill a Mockingbird", "Harper Lee")
for book in Books:
print(book.name)
출력:
Romeo and Juliet
To Kill a Mockingbird
이것이 파이썬에서 비순차에 대한 반복
오류를 해결할 수 있는 방법입니다. 이러한 솔루션이 도움이 되기를 바랍니다.
관련 문장 - Python TypeError
- Python TypeError 수정: 목록 인덱스는 목록이 아니라 정수여야 합니다.
- Python TypeError: 필수 위치 인수 1개 누락
- Python TypeError: 해시할 수 없는 유형: 목록
- TypeError 해결: Python에서 문자열 형식 지정 중에 일부 인수가 변환되지 않음
- TypeError 해결: Python에서는 정수가 필요합니다.
- TypeError: STR이 아닌 실수여야 합니다.
관련 문장 - Python Error
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.