프로그래밍언어/파이썬[Error]

[파이썬][Error] 027. TypeError - list indices must be integers or slices, not float

about_IT 2025. 5. 27. 21:06
728x90

TypeError: list indices must be integers or slices, not float 오류는 리스트(list)의 인덱스로 실수형(float) 값을 사용하려고 할 때 발생합니다. 파이썬에서는 리스트 인덱싱 시 반드시 정수(integer) 또는 슬라이스(slice) 객체를 사용해야 하며, 소수점이 있는 실수는 허용되지 않습니다.

이 오류는 보통 수학 연산 결과나 사용자 입력값이 실수형일 때 발생하며, 이를 명시적으로 정수형으로 변환하지 않고 리스트 인덱스로 사용할 경우 발생합니다. 리스트는 정수 위치 기반의 자료구조이기 때문에 정확한 위치를 지정하기 위해선 인덱스가 정수여야 합니다.

● 오류 발생 예시

values = [10, 20, 30, 40]
index = 2.0
print(values[index])

위 코드에서 index 변수는 실수형이므로 리스트 인덱싱에 사용할 수 없으며, 오류가 발생합니다.

TypeError: list indices must be integers or slices, not float

● 해결 방법

  • 실수형 인덱스를 int() 함수를 이용해 정수로 변환
  • 소수점을 가지는 인덱스는 부적절하므로 연산 결과를 정수로 강제 형변환
  • 루프나 반복에서 인덱스를 사용할 때 range()로 정수 보장

● 올바른 코드 예시

values = [10, 20, 30, 40]
index = int(2.0)
print(values[index])

위 코드는 index를 정수형으로 변환했기 때문에 정상적으로 실행됩니다. 결과는 30이 됩니다.

● 자주 하는 실수

  • 나눗셈 연산 결과를 인덱스로 사용 (len(lst)/2len(lst)//2로 변경 필요)
  • 사용자 입력을 float으로 변환 후 인덱싱에 사용
  • numpy 배열과 혼동하여 실수 인덱스를 허용할 것으로 착각

● 결론

TypeError - list indices must be integers or slices, not float 오류는 리스트 접근 시 정수가 아닌 실수 인덱스를 사용할 경우 발생합니다. 이 문제를 방지하려면 항상 인덱스 값을 정수형으로 변환하여 사용해야 하며, 연산 또는 입력 결과가 실수형일 경우에는 int(), round(), math.floor() 등 적절한 정수 변환 로직을 반드시 포함해야 합니다.

728x90