gpt4 book ai didi

python - 在 Python 请求中重试

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:57 24 4
gpt4 key购买 nike

我有以下重试需求:

我的 Python 脚本使用 REQUESTS 模块调用 API 并解析 JSON 响应。

最近 API 返回不完整的数据,如下所示

不完整的数据:

  {
offerInfo: {
siteID: "001",
language: "en_US",
currency: "USD"
},
userInfo: {
persona: {
personaType: "OTHERS"
},
userId: "111"
},
offers: { }
}

完整数据:

  {
offerInfo: {
siteID: "001",
language: "en_US",
currency: "USD"
},
userInfo: {
persona: {
personaType: "OTHERS"
},
userId: "111"
},
offers: {
Flight: [
{
offerDateRange: {
travelStartDate: [2016, 5, 7],
travelEndDate: [2016, 5, 11]
}
}
}
}

一个完整的响应应该包含 ['offers']['Flight'] 键,如果没有,我的代码应该在它放弃并转到下一个 API URL 之前尝试调用 API N 次。

我正在尝试使用以下带有 session 的代码,但不确定如何在其中添加支票 ['offers']['Flight']

注意:从API返回不完整的数据时没有HTTP错误,所以我必须依赖键['offers']['Flight']

session = requests.Session()
session.mount("http://", requests.adapters.HTTPAdapter(max_retries=2))
session.mount("https://", requests.adapters.HTTPAdapter(max_retries=2))
try:
response = session.get(url=line,timeout=(connect_timeout,read_timeout),verify=False)

最佳答案

评论中建议的 while 循环加上计数是简单的答案,可能就足够了。

相反,如果您想使用满足此类需求的模块,backoff是一个用于装饰函数以使用可配置退避行为进行重试的库。特别是,on_predicate 装饰器允许您根据指定函数的返回值定义重试条件。

import backoff

def has_flight_offer(dct):
return 'Flight' in dct.get('offers')

@backoff.on_predicate(backoff.constant, has_flight_offer, max_tries=3, interval=1)
def get_offers(session, url))
response = session.get(url, verify=False)
return response.json()

它还处理异常重试,并且可以很好地处理请求,因此您可以使用它来处理请求异常,同时使用类似的装饰。

@backoff.on_predicate(backoff.constant, has_flight_offer, max_tries=3, interval=1)
@backoff.on_exception(backoff.expo, requests.exceptions.RequestException, max_tries=3)
def get_offers(session, url))
response = session.get(url, verify=False)
return response.json()

关于python - 在 Python 请求中重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com