繁体   English   中英

Python - Json 数据打印但也会给出 KeyError

[英]Python - Json data prints but also gives 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
      }
     }
    },

见终端output:

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"]的值,否则产生 "outDiscards "outDiscards"的值,而不是(如您所料)两者都存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM