본문 바로가기
오류 해결

[Pytorch] TypeError: 'int' object is not subscriptable

by First Adventure 2024. 9. 21.
반응형

에러 메시지 설명

  이 오류는 정수형 객체(int)가 인덱싱이나 슬라이싱(subscriptable)을 지원하지 않는다는 의미입니다. Python에서 리스트, 튜플, 문자열과 같은 시퀀스 자료형은 인덱싱을 통해 개별 요소에 접근할 수 있지만, 정수(int)는 인덱싱이 불가능합니다.

 

발생 원인

  • 정수형에 인덱싱 시도: 정수형 변수에 대해 인덱싱이나 슬라이싱을 시도할 때 발생합니다. 
    • 예를 들어, 5[0]과 같이 정수 5에 인덱스를 사용하면 이 오류가 발생합니다.
  • 자료형 착오: 코드에서 정수형 변수라고 생각하지 않은 부분에서 실수로 정수형이 들어간 경우, 이를 시퀀스형으로 착각하고 인덱싱을 시도할 때 발생합니다.
    • 예: a = 5로 정수형을 선언한 후, a[0]으로 접근하려는 경우.

 

해결 방법

  • 자료형 확인: 변수가 정수형인지 확인합니다. 인덱싱이 가능한 시퀀스 자료형(리스트, 튜플, 문자열 등)만 인덱싱을 허용합니다.
a = 5
print(type(a))  # <class 'int'>

 

  • 자료형 변환: 만약 인덱싱이 필요하다면, 자료형을 적절한 시퀀스형으로 변환해야 합니다. 예를 들어, 정수를 문자열이나 리스트로 변환하여 인덱싱을 수행할 수 있습니다.
a = str(5)
print(a[0])  # "5"

 

  • 변수의 타입 체크: 코드에서 변수를 사용할 때 type()을 사용하여 해당 변수가 정수인지, 시퀀스형인지 미리 체크하는 방법도 유용할 수 있습니다. 이를 통해 잘못된 자료형을 사용하는 실수를 방지할 수 있습니다.
if isinstance(a, (list, tuple, str)):
    print(a[0])  # 시퀀스형일 경우에만 인덱싱 수행
else:
    print("인덱싱을 지원하지 않는 자료형입니다.")

 

관련 내용 및 추가 팁

  • 이 오류는 주로 리스트나 문자열 등에서 정수형 변수를 착각하고 인덱싱할 때 발생합니다. Python에서 [] 연산자는 리스트, 튜플, 문자열 등의 시퀀스 자료형에만 적용 가능하며, 정수형 객체는 인덱싱을 허용하지 않습니다​. 
  • 변수를 인덱싱하기 전에 해당 변수가 인덱싱 가능한 시퀀스 자료형인지 확인하세요.
  • type()이나 isinstance() 함수를 사용하여 변수의 타입을 미리 체크하고, 올바른 자료형으로 변환하여 사용하세요.
반응형