即使通过密钥存在Python Keyerror

问题描述

以下是我编写的用于使用请求库从url获取特定值的函数。想法是返回值名称和值唯一ID(如果存在),否则表示不存在。

在try部分下,密件抄送一词用于存储字典(这是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,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)

解决方法

您应该检查“ .json()”的返回值。它将结果带入称为“数据”的对象内。

,

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...