为了账号安全,请及时绑定邮箱和手机立即绑定

Python API 请求 - For 循环导致索引错误

Python API 请求 - For 循环导致索引错误

四季花海 2023-12-29 14:28:46
对 Python 来说相当陌生......在我的代码中与 for 循环作斗争,特别是 Key: 'topic_title' 的分配。我不断收到“列表索引超出范围”错误。“solicitation_topics”处的 JSON 响应是嵌套的,所以我相信我需要传递索引,这在尝试直接从 python 终端访问时有效,但是在函数中我不断收到错误。任何帮助将不胜感激。import requests, jsondef get_solicitations():    # api-endpoint    URL = "https://www.sbir.gov/api/solicitations.json"    # defining a params dict for the parameters to be sent to the API     PARAMS = {"keyword": 'sbir'}     # sending get requfiest and saving the response as response object     r = requests.get(url = URL, params = PARAMS)     # extracting data in json format     api_data = r.json()     # storing selected json data into a dict    solicitations = []    for data in api_data:        temp = {            'solicitation_title': data['solicitation_title'],            'program': data['program'],            'agency': data['agency'],            'branch': data['branch'],            'close_date': data['close_date'],            'solicitation_link': data['sbir_solicitation_link'],            'topic_title': data['solicitation_topics'][0]['topic_title'],        }        solicitations.append(temp)     return (solicitations)
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

复制您的代码,看起来 solicitation_topics 可能是一个空列表。我将此行添加到您的函数中:

print(f"title = {data['solicitation_title']}, topics: {data['solicitation_topics']}")

我发现这个(几个之一)是空的:

title = PHS 2020 NIH、CDC 和 FDA 小型企业创新研究补助金申请综合征集(母版 SBIR [R43/R44] 不允许进行临床试验),主题:[]

您需要弄清楚如何防范这种情况。如果你想跳过空的,你可以continue在循环的顶部放置一个:

if not data['solicitation_topics']:
    continue

或者,如果您仍然想保留没有主题的招标,您应该在上面生成您想要的标题,然后在您的临时文件中使用它:

if data['solicitation_topics']:
    topic_title = data['solicitation_topics'][0]['topic_title']
    else:
    topic_title = 'Not Supplied'


查看完整回答
反对 回复 2023-12-29
  • 1 回答
  • 0 关注
  • 40 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信