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

2024-05-28 20:07:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个循环,它通过从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'

在这种情况下,如何处理keyrerror,在这种情况下如何应用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}")

Tags: nameinapidatagetversionvmoperating
1条回答
网友
1楼 · 发布于 2024-05-28 20:07:40

您可以使用以下选项之一

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

但是,不能对None或非dict结果调用.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}")

相关问题 更多 >

    热门问题