当api中不存在数据时处理Keyerror



我有这个循环,遍历从api获得的字典,但是当到达一个不存在的键时,它显示给我以下错误:

Traceback (most recent call last):
File "C:  git_work  reports_rhev  reports_rhev  Reporte_RHV_vM_v1.0.py", line 25, in <module>
version = data.get (element ['guest_operating_system'] ['version'] ['full_version'])
KeyError: 'guest_operating_system'

在这种情况下,我如何处理keyerror,我如何在这种情况下应用get方法?

URL = https://api/ovirt-engine/api/vms
data = requests.get(URL, verify=False, auth = HTTPBasicAuth('admin@internal','password'), headers={'Accept': 'application/json'}) #Configuración de URL
data = data.json() #Convertimos la respuesta a un diccionario de datos
#print(type(data))
## Recorrer con todos los elemento dentro del diccionario de datos y obtener la información de las vMS
for elemento in data['vm']: #Recorrer el elemento host dentro de la variable data

name_vm = elemento['name']
descripcion = elemento['description']
version = elemento['guest_operating_system']['version']['full_version']
print(f"vM: {name_vm}nDescripción: {descripcion}")

尝试这样做,但它不工作:

for elemento in data['vm']: #Recorrer el elemento host dentro de la variable data
name_vm = elemento['name']
descripcion = elemento['description']
if elemento['guest_operating_system'] in data['vm']:
version = elemento['guest_operating_system']['version']['full_version'] 
else:
version = "Dato no disponible"
print(f"vM: {name_vm}nDescripción: {descripcion}nVersión: {version}")

您可以使用以下命令之一

  • 'key' in dict
  • .get('key', default),或排除默认参数以返回None而没有错误

您不能在None或非字典结果上调用.get(),因此最好不要将它们链接在一起

示例
for elemento in data.get('vm', []): 

name_vm = elemento['name']
description = elemento['description']
os = elemento.get('guest_operating_system')
if (os is not None) and ('version' in os) and ('full_version' in os['version']):
version = os['version']['full_version']
else:
version = None
print(f"vM: {name_vm}nDescripción: {descripcion}nVersion: {version}")

最新更新