Jupyter中调用API创建Pandas DataFrame出现TypeError的解决方法
错误原因
- 核心报错来自
data = json.load(open(r))这一行:requests.get(url).json()已经将接口返回的JSON字符串直接解析为Python字典类型,不需要再调用json.load()+open()的读文件逻辑处理。open()仅支持传入本地文件路径,不能传入字典对象,因此触发类型错误。 - 次要问题:拼接URL时存在换行,会生成带多余空格的无效URL,导致请求失败。
修正后的完整代码
import requests import pandas as pd def callAPI(drug_name, recievedate_from, recievedate_to): # 修正URL拼接逻辑,避免多余空格 url = f'https://api.fda.gov/drug/event.json?search=(receivedate:[{recievedate_from}+TO+{recievedate_to}])+AND+{drug_name}' # 发送请求 resp = requests.get(url) # 新增请求状态校验,接口异常时直接抛出明确错误方便定位 resp.raise_for_status() # 直接使用已经解析好的字典数据 data = resp.json() df = pd.DataFrame(data["results"]) print(df) callAPI('PREDNISOLONE', 20040101, 20210629)
修改说明
- 删掉冗余的
json模块导入和错误的json.load(open(r))逻辑,直接使用requests内置json()方法返回的字典数据 - 用f-string简化URL拼接,避免手动拼接字符串时的换行空格问题
- 新增
resp.raise_for_status()校验,接口返回4xx/5xx错误时会直接抛出明确的请求异常,方便定位问题
内容的提问来源于stack exchange,提问作者user16309118
相关产品推荐
相关产品推荐

