求助:使用While循环请求分页链接时循环体未执行
问题出在while循环的条件表达式上!
你遇到的问题根源是条件判断的写法不符合Python的运算规则,导致循环条件实际返回了False,所以循环体根本没执行。
为什么原来的条件不对?
Python里的链式比较(比如a in b == c)会被解析成(a in b) and (b == c),所以你的代码里:
while "pagination" in str(data) == True:
等价于:
while ("pagination" in str(data)) and (str(data) == True):
显然str(data)几乎不可能等于布尔值True(除非你的接口返回的JSON转成字符串后刚好是"True"),所以整个条件会变成True and False,结果是False,循环自然不会跑起来。
而你单独验证的"pagination" in str(data)确实返回True,但加上== True后逻辑完全变了。
修正后的代码
直接去掉多余的== True就可以了(因为"pagination" in str(data)本身就是布尔值,不需要再和True比较):
import requests response = requests.get("someapi.api") data = response.json() while "pagination" in str(data): print("Found string") # 注意Python3里print需要加括号,Python2可以不加 # 这里要确保pag_object是正确的下一页接口地址,记得补充它的定义逻辑 response = requests.get(str(pag_object), timeout=5) data = response.json()
额外优化建议
把整个data转成字符串来判断其实不够严谨,万一某个字段的值里刚好包含"pagination"字符串,但并不是分页标识的话,会误判。如果你的接口返回的JSON里,pagination是一个顶层键(比如data["pagination"]存在),那直接判断键存在会更准确高效:
while "pagination" in data:
内容的提问来源于stack exchange,提问作者klex52s
相关产品推荐
相关产品推荐

