Ошибка Python — ошибка IndexError: индекс списка вне диапазона

#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 is row[0] , not row[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)