#python #python-2.7
#python #python-2.7
Вопрос:
Я изучаю python, так что это может показаться простым, я пытаюсь запустить приведенный ниже код, но я продолжаю получать сообщение об ошибке, есть мысли о том, что может быть причиной этого?
from geopy import geocoders
import csv
g_api_key = 'my_google_api_key'
g = geocoders.GoogleV3(g_api_key)
costco = csv.reader (open('costcolimited.csv'), delimiter = ',')
# Print header
print "Address, City, State, Zip Code, Latitude, Longitude"
for row in costco:
full_addy = row[1] "," row[2] "," row[3] "," row[4]
place, (lat,lng) = list (g.geocode(full_addy, exactly_one=FALSE))[0]
full_addy "," str(lat) "," str(lng)
Ошибка, которую я получаю
Traceback (most recent call last):
File "C:Python27geocodelocations.py", line 12, in <module>
full_addy = row[1] "," row[2] "," row[3] "," row[4]
IndexError: list index out of range
Комментарии:
1. Помните, что первый элемент в
row
isrow[0]
, notrow[1]
.
Ответ №1:
Ошибка вызвана ссылкой на элемент из диапазона списка. Из вашего кода это, вероятно, потому, что вы начинаете считать элемент с 1
. Помните, что в списке python индекс начинается с 0
. Если это ваша ситуация, то сдвиньте индексы в
full_addy = row[1] "," row[2] "," row[3] "," row[4]
Для
full_addy = row[0] "," row[1] "," row[2] "," row[3]
В противном случае проверьте свою структуру данных и убедитесь, что она соответствует вашему коду.
Спасибо
Ответ №2:
Прежде всего, убедитесь, что ваш CSV-файл содержит четыре столбца. Попробуйте проверить, если len(row) >= 4
. Если он содержит, вы можете продолжить свой код, но на первый элемент в списке Python ссылается индекс 0.
Попробуйте что-то вроде этого:
for row in costco:
if len(row) < 4:
print "Invalid file!"
break
full_addy = row[0] "," row[1] "," row[2] "," row[3]
place, (lat,lng) = list (g.geocode(full_addy, exactly_one=FALSE))[0]
full_addy "," str(lat) "," str(lng)