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

对 Python 来说相当陌生......在我的代码中与 for 循环作斗争,特别是 Key: 'topic_title' 的分配。


我不断收到“列表索引超出范围”错误。“solicitation_topics”处的 JSON 响应是嵌套的,所以我相信我需要传递索引,这在尝试直接从 python 终端访问时有效,但是在函数中我不断收到错误。任何帮助将不胜感激。


import requests, json


def 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)


四季花海
浏览 48回答 1
1回答

慕妹3146593

复制您的代码,看起来 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'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python