【问题标题】:Python Keyerror even through the key existsPython Keyerror 即使通过密钥存在
【发布时间】:2021-01-07 17:26:57
【问题描述】:

下面是我编写的一个函数,用于使用 requests 库从 url 获取特定值。这个想法是返回值名称和值唯一 ID(如果存在),否则说它不存在。

在 try 部分下,单词 bcc 存储一个字典(这是一个 json 输出)。字典看起来像这样

{'records': [{'uuid': '1cbb7288-b828-11e9-a419-11a032324a29', 'name': '1234_192.168.6.144/24'}, {'uuid': 'c523ef30-b823-1123-a619-00avaei7a29', 'name': '1342_172.26.41.10/28'}], 'num_records': 2}

无论如何,我不断收到以下 KeyError。密钥确实存在,当我在 python 提示符下手动测试运行它时,它工作正常。但是当我将它从文件导入另一个函数下的另一个python文件时不起作用。

如果有人可以帮助我了解这里发生的事情,不胜感激。

>>> from filers import NC
>>> NC.broadcastcheck(cluster,'1243',headers)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/python/filer.py", line 65, in broadcastcheck
    def broadcastcheck(cluster, vlan, headers):
KeyError: 'num_records'

这是我写的函数。

   def broadcastcheck(cluster, vlan, headers):
      url = 'https://'+cluster+'/api/ethernet/broadcast-domains'
      pattern = re.compile(r'^[^_]+(?=_)')
      try:
         bcc = requests.get(url,headers=headers,verify=False).json()
         for i in range(bcc['num_records']):
            bcdname = bcc['records'][i]['name']
            bcduuid = bcc['records'][i]['uuid']
            matches = pattern.finditer(bcdname)
            for match in matches:
               return "present",bcdname,bcduuid if match.group(0) == vlan else "notpresent"
      except requests.exceptions.HTTPError as error:
         print(str(error))
         sys.exit(1)

【问题讨论】:

  • bccbroadcastcheck 一定不是您所期望的。在分配bcc 之后打印几张照片并真正验证它。如果您遇到密钥错误,则该密钥不存在于您期望的级别。验证您期望的数据是否没有其他包装器。

标签: python-3.x function keyerror


【解决方案1】:

对此我很抱歉。看起来 API 链接是问题所在。它没有返回预期值。现在它可以正常工作了。

【讨论】:

    【解决方案2】:

    您应该检查“.json()”的返回。它可能会将结果带入一个名为“数据”的对象中。

    【讨论】:

    • 你能扩展这个答案吗?这个答案很模糊。
    • 是的,我也是。我不明白我的代码中名为 data 的对象在哪里。
    • request().get().json() 方法可以返回对象数据内的响应,请检查 request().get().json() 的返回以确定。
    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2019-11-10
    • 2018-08-17
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多