Цикл запроса на пагинацию - PullRequest
0 голосов
/ 25 мая 2018

Я хочу перебирать страницы нумерации страниц, пока не достигну последней.Я ищу на странице слово pagination и, пока оно присутствует, я хочу, чтобы мой цикл продолжался.То, что я сейчас имею, не выполняет часть внутри цикла while.Я проверил оператор условия отдельно, чтобы убедиться, что он возвращает True.

response = requests.get("someapi.api")
data = response.json()

while "pagination" in str(data) == True:
    print "Found string"
    response = requests.get(str(pag_object), timeout=5)
    data = response.json()

1 Ответ

0 голосов
/ 25 мая 2018

Ваше состояние неверно.Это то, что вы хотели бы:

while "pagination" in str(data):
    # ...

(По крайней мере, для условия, поскольку вы получили структурированный JSON в качестве ответа, возможно, есть более чистые способы сделать эту проверку, но здесь дело не в этом).


Ваше исходное условие не работает, потому что под капотом Python интерпретирует его как

"pagination" in str(data) and str(data) == True

Это является следствием всех операторов сравнения (включая членствотесты типа in), имеющие одинаковый приоритет и цепочка операторов сравнения .

цепочка означает, что вы можете написать общее математическое выражение, напримерx < y < z и это означает, что мы обычно думаем, что оно делает - y находится между x и z.Или, другими словами, x < y AND y < z.

Однако применительно к вашему исходному выражению эта цепочка приводит к удивительным результатам, которые вы видите.

И это происходит , хотя вы тестировали часть своего состояния отдельно, потому что гоча находится в определенном составе этих подвыражений.Если бы вы написали это, сгруппировав левую часть

("pagination" in str(data)) == True

, это действительно сработало бы - хотя это и не нужно.Достаточно просто сделать if item in sequence в Python и намного лучше.

...