프로그래밍언어/파이썬[Error]
[파이썬][Error] 033. TypeError - 'generator' object is not iterable
about_IT
2025. 5. 27. 21:09
728x90
TypeError: 'generator' object is not iterable
오류는 제너레이터(generator) 객체를 반복 가능한(iterable) 객체로 사용하려고 했지만, 그 방식이 잘못되었을 때 발생합니다. 파이썬의 제너레이터는 이터레이터(iterator)의 일종이지만, 직접 리스트나 튜플처럼 반복하려면 for
문이나 list()
, tuple()
등을 통해 변환하여야 합니다.
이 오류는 제너레이터를 반복문이 아닌 리스트 형태로 직접 사용하거나, 리스트 안에서 언패킹할 때 발생합니다. 제너레이터는 yield
를 통해 값을 순차적으로 생성하는 객체로, 명시적인 반복이 필요합니다.
● 오류 발생 예시
def my_gen():
yield 1
yield 2
yield 3
print(','.join(my_gen()))
이 코드는 join()
함수가 문자열 리스트를 기대하는데, 제너레이터 객체를 직접 넘겨 오류가 발생합니다.
TypeError: sequence item 0: expected str instance, int found
● 해결 방법
- 제너레이터를
list()
또는tuple()
로 변환 for
문을 사용하여 반복 처리map(str, generator)
로 문자열 변환 후join()
적용
● 올바른 코드 예시
def my_gen():
yield 1
yield 2
yield 3
print(','.join(map(str, my_gen())))
제너레이터의 각 항목을 문자열로 변환한 후 join()
하면 오류 없이 실행됩니다. 결과는 1,2,3
입니다.
● 자주 하는 실수
- 제너레이터를 list, tuple로 변환하지 않고 함수에 넘김
- 문자열 함수에 숫자형 제너레이터 직접 사용
- 제너레이터를 이터러블로 인식했지만 실제 처리 방식이 불일치
● 결론
TypeError - 'generator' object is not iterable
오류는 제너레이터를 리스트나 문자열처럼 직접 반복 가능한 객체로 처리할 때 생기는 오류입니다. 반드시 list()
, for
문, map()
등을 통해 명시적으로 반복 가능한 형태로 변환하여 사용해야 합니다.
728x90