使用Requests调用Python API时如何忽略JSON中的null值?
解决TypeError: 'NoneType' object is not subscriptable问题
你的报错原因是代码中尝试对None值使用下标访问(比如[]),大概率是返回的JSON里部分a["links"]为null,或者a["attributes"]为null,导致执行下标操作时触发错误。下面给你三种具体的解决方法,按需选择:
方案1:替换Null值为默认值(不跳过条目)
用字典的get()方法给可能为None的字段设置默认值,既保留条目,又避免报错:
import requests all_data = [] api_url = 'https://api.nfz.gov.pl/app-umw-api/agreements?page={}&limit=25&format=json&api-version=1.2&serviceType=03&year=2017&branch=07' for page in range(0, 17): data = requests.get(api_url.format(page)).json() for a in data["data"]["agreements"]: # 若attributes为None,用空字典替代;若links为None或没有related,用'n/a'替代 all_data.append({ **(a.get("attributes", {})), "link": a.get("links", {}).get("related", "n/a") }) print(all_data)
方案2:直接跳过存在Null值的无效条目
如果不需要保留有问题的条目,可以先做条件判断,只处理符合要求的数据:
import requests all_data = [] api_url = 'https://api.nfz.gov.pl/app-umw-api/agreements?page={}&limit=25&format=json&api-version=1.2&serviceType=03&year=2017&branch=07' for page in range(0, 17): data = requests.get(api_url.format(page)).json() for a in data["data"]["agreements"]: # 检查attributes和links不为空,且links里有related字段 if a.get("attributes") is not None and a.get("links") is not None and "related" in a["links"]: all_data.append({**a["attributes"], "link": a["links"]['related']}) else: # 可选:打印跳过的条目,方便排查 print(f"跳过无效条目:{a}") print(all_data)
方案3:用异常捕获兜底处理所有可能的错误
如果不确定还有哪些字段可能出问题,用try-except捕获异常,保证程序不中断:
import requests all_data = [] api_url = 'https://api.nfz.gov.pl/app-umw-api/agreements?page={}&limit=25&format=json&api-version=1.2&serviceType=03&year=2017&branch=07' for page in range(0, 17): data = requests.get(api_url.format(page)).json() for a in data["data"]["agreements"]: try: all_data.append({**a["attributes"], "link": a["links"]['related']}) except (TypeError, KeyError) as e: # 捕获None下标访问、字段不存在的错误 print(f"处理条目失败:{a},错误信息:{e}") continue # 跳过当前条目,继续处理下一个 print(all_data)
内容的提问来源于stack exchange,提问作者Michael Wiz
相关产品推荐
相关产品推荐

