【发布时间】: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)
【问题讨论】:
-
bcc内broadcastcheck一定不是您所期望的。在分配bcc之后打印几张照片并真正验证它。如果您遇到密钥错误,则该密钥不存在于您期望的级别。验证您期望的数据是否没有其他包装器。
标签: python-3.x function keyerror