Метод Get не возвращает определенное необязательное значение

#python-3.x #methods

Вопрос:

Это код, с которым я работаю :

 newResults = True
pages = 9

while newResults:    
    Request = f"{url}?key={API_Key}amp;ts={ts}amp;hash={hash}amp;project_id={project_id}amp;per_page= {per_page}amp;page={pages}amp;date_from={date_from}amp;date_to={date_to}"
    r = requests.get(Request)
    data = r.json()
    for id in data['tickets']:
        newResults = id.get('id', False)
    pages  = 1
 

Как только код попадает в newResults = id.get('id', False) , а ключ не существует, он ломается. Попробовал использовать пустой список, попробовал использовать строку. Попробовал распечатать новый результат, чтобы посмотреть, что происходит.Он не выводит необязательное значение.
Цикл продолжается вечно.

Что я делаю не так?

Комментарии:

1. «это ломается» Как?

2. Цикл продолжается. Новые результаты не становятся ложными

3.Сколько id там data['tickets'] букв «с»? Вы хотите, чтобы цикл оборвался, если таковой имеется, все или только у последнего id нет 'id' ?

4. значение per_page равно 100, на странице 9-100, на странице 10-28. Я хочу взять все идентификаторы, прежде чем он сломается, в принципе, он должен сломаться на идентификаторе 29 на странице 10, поскольку его не существует.

5. ну, если data['tickets'] это пустой список, то newResults никогда не будет False -> бесконечный цикл

Ответ №1:

До сих пор не знаю, почему .get() не возвращает False, но вот способ сделать это.

 newResults = True
pages = 9

while newResults :     
        ticketsRequest = f"{url}?key={API_Key}amp;ts={ts}amp;hash={hash}amp;project_id={project_id}amp;per_page={per_page}amp;page={pages}amp;date_from={date_from}amp;date_to={date_to}"
        r = requests.get(ticketsRequest)
        data = r.json()
        total = data['total']
        for id in data['tickets']:
            #stuff to do 
            result  = 1
        pages  = 1
        if result == total:
            print (project_id, total, result)
            break
 

Комментарии:

1. Немного поздно для этого, но id это встроенная функция в python (именно поэтому она отображается в том же цвете, что print и и отличается от newResults или pages выше), поэтому это не лучший выбор имени переменной. TicketID или что-то в этом роде позволит избежать затенения (т. Е. перезаписи внутри этой функции) встроенной функции и, возможно, некоторых труднодоступных проблем. То же самое верно и для hash . В приведенном выше коде не похоже, что для счетчика задано какое-либо начальное значение result .