KeyError во время цикла - PullRequest
       11

KeyError во время цикла

0 голосов
/ 05 июня 2018

Я пытаюсь перебрать URL-адреса нумерации страниц.Я нахожу URL-адрес нумерации страниц на первой странице, перехожу на него, нахожу его на 2-й странице, перехожу на него и так далее до последней страницы.Тем не менее, я получаю KeyError, которая является результатом отсутствия нумерации страниц на последней странице.Тем не менее, я думал, что мое уравнение поймает это, поскольку мое утверждение будет ложным, и цикл останавливается.

response1 = requests.get("api.weather.gov/alerts?limit=100") # request API
data1 = response1.json()
pag_object1 = (data1['pagination']['next']) #find pagination object 

while ("pagination" in str(data1)) == True: # while string is found
    response1 = requests.get(pag_object1) # use 1st pag object to make new response
    data1 = response1.json()
    pag_object1 = (data1['pagination']['next']) # redefine pag object

Ошибка:

KeyError: 'pagination'

1 Ответ

0 голосов
/ 05 июня 2018

Я полагаю, что проблема в следующем, вы переопределяете pag_object1 до того, как условие цикла while будет проверено снова.

То, что я верю, происходит:

  • data1 является второй последней страницей и все еще содержит объект 'pagination'
  • pag_object1 может быть назначен, поскольку data1 содержит ключназывается 'pagination'
  • , в то время как условие будет иметь значение True

Last Loop:

  • data1 находится на последней странице и не содержит ключ'pagination', но, тем не менее, вы пытаетесь назначить pag_object1 перед проверкой состояния цикла while

Это должно исправить это:

response1 = requests.get("api.weather.gov/alerts?limit=100") # request API
data1 = response1.json()

# while the pagination string is in the keys 
while "pagination" in data1: 
    # assign the pagination object
    pag_object1 = (data1['pagination']['next']) 

    # use pag_object1 to create a new request for the next page
    response1 = requests.get(pag_object1) 

    # assign the new page to the data1 object
    data1 = response1.json()
...