问题描述
以下是我编写的用于使用请求库从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链接是问题所在。它没有返回预期值。现在可以了,并且可以正常工作。