파이썬 list index out of range 에러 관련 질문

조회수 7756회

안녕하세요, 파이썬을 공부하는 대학생 입니다. 파이썬을 공부하던 중 계속 다음과 같은 에러를 만나서 이렇게 질문 올리게 되었습니다. 아무리 고민해도 어디가 문제인지, 에러만 보고는 판단 할 수 없어서 질문드립니다 현재 서울시 공원 데이터에서 공원명 데이터를 뽑아와서 새로운 데이터 프레임을 만들고 함수를 활용하여 주소, 위도, 경도의 위치 정보를 불러오려고 하는데, 계속 다음과 같은 에러가 발생합니다. 도와주세요 ㅠ

Traceback (most recent call last): File "", line 3, in File "", line 10, in getAddr IndexError: list index out of range

//import googlemaps
import googlemap_key
import pandas as pd




def getAddr(name):
    map = gmaps.geocode(name, language='ko')
    addr = map[0].get('formatted_address')
    tmp_loc = map[0].get('geometry').get('location')
    return addr, tmp_loc['lat'], tmp_loc['lng']


# 데이터 불러오기

Park_in_Seoul = pd.read_csv('/Users/ikwonjobs/Documents/data/Seoul_Park.csv', encoding='utf-8')
Park_Seoul = pd.DataFrame()
Park_Seoul['공원'] = Park_in_Seoul.공원명

Park_Seoul.to_csv('/Users/ikwonjobs/Documents/data/Park_Seoul.csv', encoding = 'utf-8')

print(Park_Seoul.head())

#데이터 추가



pd.read_csv('/Users/ikwonjobs/Documents/data/Park_Seoul.csv',index_col=0,encoding='utf-8')

park_addr = []
park_lat = []
park_lng = []
gmaps = googlemaps.Client(key=googlemap_key.gmaps_key)
for park in Park_Seoul.공원:
    addr,lat, lng = getAddr(park)
    park_addr.append(addr)
    park_lat.append(lat)
    park_lng.append(lng)

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • list index out of range 는 리스트나 튜플 등의 인덱스값이 길이 이상일 때 발생하는 에러입니다.

    에러메시지를 보면,

        map = gmaps.geocode(name, language='ko')
        addr = map[0].get('formatted_address')  # <<< list index out of range
    

    에서 발생한 것으로 보입니다. 즉, map[0] 에서요.

    mapNone 등으로 반환되었다면, object not subscriptable 에러가 발생했을 것이기 때문에, gmap.geocode 함수가 반환한 map은 길이가 0인 빈 리스트 (=[]) 일 것으로 보이고요. 왜 그렇게 반환되었는지는, 확일하게 정확한 리턴을 주는 name을 집어넣었을 때는 제대로 반환되는지 확인해서 비교해 봐야 할 것 같고요.

    추가적으로 좀 문제가 될 수 있는 부분은, 서울시나 정부사이트에서 제공하는 csv 데이터는 보통 인코딩이 utf-8이 아니라, euc-kr 로 되어 있습니다. 잘못된 인코딩으로 읽으면, 주소가 깨지겠죠.

    좀 더 디버깅해 봐야 할 것 같은데, 해보시고, 또 이상한 부분 있으면 질문 추가해주세요. (어떤 데이터로 하시는 건지도 알려주세요.)

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)