본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 107. TypeError - 'CustomObject' object is not subscriptable

by about_IT 2025. 6. 1.
728x90

TypeError: 'CustomObject' object is not subscriptable 오류는 인덱싱 또는 슬라이싱이 불가능한 객체에 대해 [] 연산을 사용했을 때 발생합니다. 예를 들어 리스트, 튜플, 딕셔너리 등은 서브스크립트(subscriptable) 객체이지만, 사용자 정의 클래스나 일반 객체는 그렇지 않을 수 있습니다.

이 오류는 흔히 클래스 인스턴스를 마치 리스트처럼 사용하려 할 때 발생하며, 객체에 __getitem__() 메서드가 정의되어 있지 않기 때문에 발생합니다.

● 오류 발생 예시

class MyObject:
    def __init__(self):
        self.data = [1, 2, 3]

obj = MyObject()
print(obj[0])  # 오류 발생

위 예제에서는 obj 객체가 리스트처럼 사용되었지만, 클래스에 __getitem__이 정의되어 있지 않아 오류가 발생합니다.

● 주요 원인

  • 사용자 정의 객체에 대해 리스트처럼 인덱싱 시도
  • 딕셔너리나 리스트로 착각하고 다른 타입 객체에 [] 연산 사용
  • __getitem__ 미구현 클래스에 인덱싱 적용

● 해결 방법

  • 객체의 타입을 먼저 확인하고 인덱싱 가능한지 판단
  • 필요 시 __getitem__ 메서드를 클래스에 구현
  • 객체 내부 데이터를 명시적으로 접근 (예: obj.data[0])

● 예시 코드 (정상 처리)

class MyObject:
    def __init__(self):
        self.data = [1, 2, 3]

    def __getitem__(self, index):
        return self.data[index]

obj = MyObject()
print(obj[0])  # 출력: 1

● 결론

TypeError - not subscriptable 오류는 객체가 인덱싱을 지원하지 않음에도 불구하고 리스트처럼 사용했을 때 발생합니다. 이 경우 객체 내부 구조를 잘 파악하고, 필요한 경우 __getitem__을 직접 구현해 인덱싱 기능을 제공해야 합니다.

728x90