IndexError: список индексов вне диапазона заданий - PullRequest
0 голосов
/ 24 октября 2018

У меня проблема с моим кодом Python.И что бы я ни пытался, ошибка INDEXERROR: LIST INDEX OUT OF RANGE появляется снова и снова.Может кто-нибудь, пожалуйста, помогите мне.Я добавляю свой код и сообщение об ошибке ниже.

import urllib,json

# serviceurl = 'http://maps.googleapis.com/maps/api/geocode/json?'
serviceurl = 'http://python-data.dr-chuck.net/geojson?'

while True:
    address = input('Enter location: ')
    if len(address) < 1: break

    url = serviceurl + urllib.parse.urlencode({'sensor':'false', 'address': 
address})

    print ('Retrieving ',url)
    url_handle = urllib.request.urlopen(url)
    data = url_handle.read()

print ('Retrieved',len(data),'characters')
json_data = json.loads(data)

#print json.dumps(json_data['results'], indent=3)
print ('Place id',json_data['results'][0]['place_id'])

И это мое сообщение об ошибке:

Enter location: http://py4e-data.dr-chuck.net/geojson?
Retrieving  http://python-data.dr-chuck.net/geojson?sensor=false&address=http%3A%2F%2Fpy4e-data.dr-chuck.net%2Fgeojson%3F
Retrieved 10092 characters
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-2-a72864740266> in <module>()
     15 
     16     #print json.dumps(json_data['results'], indent=3)
---> 17     print ('Place id',json_data['results'][0]['place_id'])

IndexError: list index out of range

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 24 октября 2018

Если вы проверите свои переменные в проводнике переменных Spyder, вы ясно увидите, что json_data['results'] - это пустой список, или просто напечатаете его -

json_data['results']
Out[22]: []

Следовательно, когда выпопытайтесь получить доступ к своему первому элементу через json_data['results'][0], он выдаст вам ошибку IndexError, потому что он вообще не существует.

Редактировать:
Я покопался глубже, чтобы выяснить, что происходит-
Если вы дадите правильный ввод, например «UCLA», вы получите json с даннымив поле results.Например, url , к которому ваш сценарий пытается обратиться, если я введу UCLA в качестве ввода.
Однако, если какой-либо ввод, которого нет в этом начальном вызове serviceurl , тогдавы получите что-то вроде this , которое, как вы можете видеть, имеет Ничего в result поле.
Вам нужно иметь проверки в вашем коде, чтобы вы могли правильно решить эту проблему.

...