TypeError: 비순차적 반복

Rohan Timalsina 2023년6월21일
  1. Python에서 TypeError: iteration over non-sequence 재생성
  2. 목록을 반복하여 Python에서 TypeError: iteration over non-sequence 수정
  3. __iter__를 사용하여 Python에서 TypeError: iteration over non-sequence 오류 수정
TypeError: 비순차적 반복

함수나 작업이 부적절한 유형의 객체에 적용될 때 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__ 메서드가 사용됩니다. 컨테이너의 모든 개체를 반복할 수 있는 반복자 개체를 반환해야 합니다.

BooksCollection의 인스턴스입니다. __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

이것이 파이썬에서 비순차에 대한 반복 오류를 해결할 수 있는 방법입니다. 이러한 솔루션이 도움이 되기를 바랍니다.

Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

관련 문장 - Python TypeError

관련 문장 - Python Error