프로그래밍언어/파이썬[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