對 Python 來說相當陌生......在我的代碼中與 for 循環作斗爭,特別是 Key: 'topic_title' 的分配。我不斷收到“列表索引超出范圍”錯誤?!皊olicitation_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
提交
取消