python - Python - Json 数据打印但也给出 KeyError
问题描述
我正在尝试从从多个 URL 中提取的 JSON 数据中提取一个特定的密钥,我正在成功地执行此操作,但是,在数据打印之后,我出于某种原因得到一个 KeyError,这令人困惑,因为数据正在打印...... ..见下面的代码;
for url in URLs:
data = requests.get(url, cookies=cookies, verify=False).json()
notifications = data["notifications"]
for notification in notifications:
if notification["updates"].get("inDiscards", "outDiscards"):
outDiscards = notification["updates"]["outDiscards"]["value"]["avg"]["float"]
inDiscards = notification["updates"]["inDiscards"]["value"]["avg"]["float"]
print(outDiscards, inDiscards)
我正在尝试提取 InDiscards 和 OutDiscards 的 AVG 浮点数
json数据如下:
{
"notifications": [
{
"timestamp": "15002302302",
"path_elements": [
"Devices",
"AAX1238128318",
"versioned-data",
"interfaces",
"data",
"Ethernet2",
"aggregate",
"rates",
"1m"
],
"updates": {
"alignmentErrors": {
"key": "alignmentErrors",
"value": {
"avg": {
"float": 0
},
"max": {
"float": 0
},
"min": {
"float": 0
},
"stddev": {
"float": 0
},
"weight": {
"float": 1
}
}
},
"inDiscards": {
"key": "inDiscards",
"value": {
"avg": {
"float": 0
},
"max": {
"float": 0
},
"min": {
"float": 0
},
"stddev": {
"float": 0
},
"weight": {
"float": 1
}
}
},
"outDiscards": {
"key": "outDiscards",
"value": {
"avg": {
"float": 0
},
"max": {
"float": 0
},
"min": {
"float": 0
},
"stddev": {
"float": 0
},
"weight": {
"float": 1
}
}
},
查看终端输出:
0 0
Traceback (most recent call last):
line 26, in <module>
outDiscards = notification["updates"]["outDiscards"]["value"]["avg"]["float"]
KeyError: 'outDiscards'
如您所见, 0,0 打印正确但有错误
解决方案
notification["updates"].get("inDiscards", "outDiscards")
产生notification["updates"]["inDiscards"]
if 它存在的值,"outDiscards"
否则,不是(如您所假设的)两者都存在。
推荐阅读
- javascript - 有没有办法从 Plotly.js 中的 plot.data 等 Dygraphs 中获取数据?
- sql - 如何对必须属于值('ve02','ve14;,'ve22')的组特殊列进行SQL查询
- angular - 如何从 Ionic Dynamic Select Options 中获取 ID 值和 NAME 值
- laravel - Laravel API 资源将模型转换为 POST 请求数据
- azure - 无法将“System.String”类型的值转换为“System.Collections.Hashtable”类型
- java - 迭代列表查找布尔属性,返回默认 false
- android - 我丢失了用于签署我的 apk 的密钥库。可以在play store重新上传吗?
- java - 如何将来自 localhost:8080 的其余请求重定向到不同的端口?
- angular - 为什么在不提交表单的情况下编辑表单的 [(NgModel)] 输入时 BehaviorSubject 会发生变化?
- visual-studio-code - VS Code 上具有多重性的 Vim 键盘映射