TypeError: 'int' object is not subscriptable
에러는 파이썬으로 프로그래밍하면서 꽤 자주 만나게 되는 에러이죠. 이 에러는 어떤 경우에 발생하고, 어떻게 해결하면 좋을지 알아봅시다.
—
에러 메시지의 가장 앞에 적혀있는 TypeError는 일반적으로, 이 에러가 자료형(Data Type)과 관련된 에러임을 알려주는 것이라고 보시면 됩니다. 문자열(str), 정수(int), 실수(float), 리스트(list) 등의 자료형들이 있는데 이 자료형과 관련된 무언가에서 에러가 발생했다는 것입니다.
TypeError를 만나는 경우는 보통 아래와 같은 경우에서 만나게 됩니다.
어찌 되었든 자료형과 관련된 에러라는 것이죠.
TypeError: 'int' object is not subscriptable
역시 자료형과 관련된 에러인데요, 정수형(int)에서 ‘인덱싱' 및 ‘슬라이싱'을 시도하려고 할 때 만나는 에러입니다.
파이썬에서는 문자열이나 리스트의 인덱싱, 슬라이싱이 가능하다고 배우셨을 것입니다. 보통 아래와 같은 생김새이죠.
# 문자열
mystring = 'welcome to codeit'
mystring[2]
mystring[1:4]
mystring[5:]
mystring[:3]
# 리스트
mylist = ['코드잇', '최고', '리스트는', '슬라이싱이', '잘', '됩니다']
mylist[2]
mylist[1:4]
mylist[5:]
mylist[:3]
하지만 정수형을 인덱싱, 슬라이싱 하려고 하면 아래의 에러를 만나게 됩니다.
# 정수형
mynum = 23
mynum[2]
Traceback (most recent call last):
File "main.py", line 4, in <module>
mynum[2]
TypeError: 'int' object is not subscriptable
정수형뿐만 아니라 인덱싱과 슬라이싱이 불가능한 다른 자료형으로 시도해도 비슷한 에러 메시지를 확인할 수 있습니다.
TypeError: 'float' object is not subscriptable
TypeError: 'bool' object is not subscriptable
우선 에러 메시지에서, 몇번째 줄의 어떤 코드에서 에러가 발생했는지를 확인해야겠죠. 앞선 예시의 경우 4번째 줄의(line 4), mynum[2]
라는 코드에서 에러가 발생했다는 것을 알 수 있죠.
Traceback (most recent call last):
File "main.py", line 4, in <module> # 에러가 발생한 장소
mynum[2] # 에러가 발생한 코드
TypeError: 'int' object is not subscriptable
앞서 말한 것처럼 이 에러는 인덱싱이나 슬라이싱이 안되는 자료형을 인덱싱, 슬라이싱 할 때 볼 수 있기 때문에, 보통 에러가 발생한 코드는 아래처럼 특정 변수를 인덱싱하거나 슬라이싱하려는 부분이 분명히 있을 것입니다.
mynum[1]
mynum[2:5]
mynum[:3]
mynum[2:]
그렇다면 그 변수가(위의 예시에서는 mynum
) ‘정수형'이라서 에러를 만난 것이기 때문에, 여러분의 의도에 따라서 앞선 코드에서 해당 변수의 선언 부분을 알맞게 수정해 주시는 작업을 거치면 문제가 해결될 것입니다. 인덱싱이나 슬라이싱을 의도했을 테니 해당 변수는 문자열(str), 리스트(list), 튜플(tuple) 등의 자료형이 되어야 하겠죠? 의도하신 바에 따라 코드를 한 번 수정해보세요!
이 글이 여러분의 문제 해결에 도움이 되었길 바랍니다.
혼자 파이썬 공부하다가 막막하다면, 기초 원리와 개념부터 차근차근 제대로 배울 수 있는 코드잇의 프로그래밍 기초 in Python 강의를 수강해보세요. 누구나 쉽고 재미있게 파이썬이라는 언어를 배우고 코딩에 대한 두려움을 떨쳐버릴 수 있을 거예요.