对 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'
添加回答
举报
0/150
提交
取消