我正在嘗試使用 python 從 API 決議一些 json。結果被分頁為 100 個組,NextPageLinkjson 中的一個條目鏈接到下一頁。
我有一個類,有一個決議器,當點擊 時,它應該在新的回應上呼叫自己NextPageLink,但它似乎不起作用。
有人可以解釋為什么嗎?
import requests
from requests.exceptions import HTTPError
class MyParser():
def __init__(self):
try:
self.response = requests.get("API end point url")
except HTTPError as http_err:
print("HTTP Error")
except:
print("Other Error")
def parse(self):
print("Called outer")
for item in self.response.json()["Items"]:
yield {
item["Thing"]:item["Entry"]
}
next_page = self.response.json()["NextPageLink"]
if next_page is not None:
self.response=requests.get(next_page)
print("about to call again")
self.parse()
print("Called")
似乎不起作用。我從:
test = MyParser()
for i in test.parse():
print(i)
輸出
Called outer
list of things yielded
about to call again
Called
uj5u.com熱心網友回復:
根據這個“yield”關鍵字有什么作用?
第一次 for 呼叫從你的函式創建的生成器物件時,它會從頭開始運行你的函式中的代碼,直到它達到 yield,然后它會回傳回圈的第一個值。然后,每個后續呼叫將運行您在函式中撰寫的回圈的另一次迭代并回傳下一個值。這將一直持續到生成器被認為是空的,這發生在函式運行時沒有達到產量時。這可能是因為回圈已經結束,或者因為您不再滿足“if/else”。
我認為這意味著當您使用 yield 關鍵字時,該函式將回傳一個生成器。如果你使用生成器,它會搜索關鍵字yield,并嘗試運行代碼,直到遇到其中一個 yield。由于 parse 函式的下部沒有“yield”,因此 for 回圈將簡單地停止。
我嘗試產生 self.parse() 的呼叫,但它只是列印生成器物件,如“<generator object xxx at 0x7f3afa5287d0>”
我還沒有測驗過,但也許你可以使用一個while回圈:
def parse(self):
print("Called outer")
items = self.response.json()["Items"]
while items:
if not items:
break
for item in items:
yield {
item["Thing"]: item["Entry"]
}
link = self.response.json()["NextPageLink"]
resp = requests.get(link)
items = resp.json()['Items']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/493577.html
