ur_dir python python-3.x

python - keyerror ur_dir



¿Qué clave falló en Python KeyError? (3)

Si capturo un KeyError , ¿cómo puedo saber qué búsqueda falló?

def poijson2xml(location_node, POI_JSON): try: man_json = POI_JSON["FastestMan"] woman_json = POI_JSON["FastestWoman"] except KeyError: # How can I tell what key ("FastestMan" or "FastestWoman") caused the error? LogErrorMessage ("POIJSON2XML", "Can''t find mandatory key in JSON")


No estoy seguro de si está utilizando algún módulo para ayudarlo: si el JSON entra como un dict, se puede usar dict.get() para un final útil.

def POIJSON2DOM (location_node, POI_JSON): man_JSON = POI_JSON.get("FastestMan", ''No Data for fastest man'') woman_JSON = POI_JSON.get("FastestWoman", ''No Data for fastest woman'') #work with the answers as you see fit

dict.get() toma dos argumentos, el primero es la key que desea, el segundo es el valor que devolverá si esa clave no existe.


Si importa el módulo sys , puede obtener información de excepción con sys.exc_info()

Me gusta esto:

def POIJSON2DOM (location_node, POI_JSON): try: man_JSON = POI_JSON["FastestMan"] woman_JSON = POI_JSON["FastestWoman"] except KeyError: # you can inspect these variables for error information err_type, err_value, err_traceback = sys.exc_info() REDI.LogErrorMessage ("POIJSON2DOM", "Can''t find mandatory key in JSON")


Tome la excepción actual (la utilicé as e en este caso); luego, para un KeyError el primer argumento es la clave que generó la excepción. Por lo tanto, podemos hacer:

except KeyError as e: # One would do it as ''KeyError, e:'' in Python 2. cause = e.args[0]

Con eso, tienes la clave ofensiva almacenada en cause .

Cabe señalar que e.message funciona en Python 2 pero no en Python 3, por lo que no debe utilizarse.