import requests
import json
r = requests.get("https://api.investing.com/api/search/?t=Equities&q=amd") # i get json text from this api
data = json.loads(r.text)
if data['articles'][0]['exchange'] == 'Sydney': # the error is here KeyError: 'exchange'
print('success')
else:
print('fail')
如果我想通过检查“交换”是否为存储在json文本这一部分中的“Sydney”来获取url“/equities/segue resources ltd”,“description”:“segue resources ltd”,“symbol”:“AMD”,“exchange”:“Sydney”,“flag”:“AU”,“type”:“equities”}
如果我理解正确,
exchange
标识符只出现在json响应的一部分。因此,为了使用问题中相同的data
变量获得结果,我们可以这样做:result = [val["url"] for val in data["quotes"] if val["exchange"] == "Sydney"]
我们在这里使用列表理解,循环只经过
data["quotes"]
而不是整个json响应,对于该json子集中的每个项,我们将返回key == "url"
的值,其中exchange == "Sydney"
。运行上面的行应该会让您:['/equities/segue-resources-ltd']
正如所料。如果您对列表理解感到不舒服,则更传统的循环版本如下所示:
KeyError: 'exchange'
表示字典data['articles'][0]
没有键'exchange'
根据您的用例,您可能希望迭代整个文章列表:
如果您只想查看第一篇文章,请使用} 方法将返回
data['articles'][0].get('exchange')
。如果键不存在,^{None
,而不是抛出KeyError
相关问题 更多 >
编程相关推荐