#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 (именно поэтому она отображается в том же цвете, чтоnewResults
илиpages
выше), поэтому это не лучший выбор имени переменной. TicketID или что-то в этом роде позволит избежать затенения (т. Е. перезаписи внутри этой функции) встроенной функции и, возможно, некоторых труднодоступных проблем. То же самое верно и дляhash
. В приведенном выше коде не похоже, что для счетчика задано какое-либо начальное значениеresult
.