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