我有这个循环,遍历从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}")