without try print exceptions example error custom catch all python try-catch except

print - try catch python example



Coger KeyError en Python (7)

Debe consultar la documentación de cualquier biblioteca que esté lanzando la excepción, para ver cómo obtener un mensaje de error fuera de sus excepciones.

Alternativamente, una buena manera de depurar este tipo de cosas es decir:

except Exception, e: print dir(e)

para ver qué propiedades tiene e - probablemente encontrará que tiene una propiedad de message o similar.

Si ejecuto el código:

connection = manager.connect("I2Cx")

El programa se bloquea e informa un KeyError porque I2Cx no existe (debería ser I2C).

Pero si lo hago:

try: connection = manager.connect("I2Cx") except Exception, e: print e

No imprime nada para e. Me gustaría poder imprimir la excepción que se lanzó. Si intento lo mismo con una operación de división por cero, se captura y se informa correctamente en ambos casos. ¿Que me estoy perdiendo aqui?


Estoy usando Python 3.6 y usando una coma entre Exception y e no funciona. Necesito usar la siguiente sintaxis (solo para cualquiera que se lo pregunte)

connection = manager.connect.get("I2Cx")


Intente imprimir (e.message) esto debería poder imprimir su excepción.

try: connection = manager.connect("I2Cx") except Exception, e: print(e.message)


No creo que Python tenga una trampa :)

manager.connect.get("")


Si está generando un error KeyError sin mensaje, no imprimirá nada. Si lo haces...

try: connection = manager.connect("I2Cx") except Exception, e: print repr(e)

... al menos obtendrás el nombre de la clase de excepción.

Una mejor alternativa es usar varios bloques except , y solo "capturar" las excepciones que intenta manejar ...

try: connection = manager.connect("I2Cx") except KeyError, e: print ''I got a KeyError - reason "%s"'' % str(e) except IndexError, e: print ''I got an IndexError - reason "%s"'' % str(e)

Existen razones válidas para detectar todas las excepciones, pero casi siempre debería volver a aumentarlas si lo hace ...

try: connection = manager.connect("I2Cx") except KeyError, e: print ''I got a KeyError - reason "%s"'' % str(e) except: print ''I got another exception, but I should re-raise'' raise

... porque probablemente no desee manejar KeyboardInterrupt si el usuario presiona CTRL-C, ni SystemExit si el bloque try llama a sys.exit() .


Si no quiere manejar el error, simplemente NoneType y use get() por ejemplo:

try: connection = manager.connect("I2Cx") except Exception, e: print(e.message)


También puedes intentar usar get() , por ejemplo:

try: connection = manager.connect("I2Cx") except Exception, e: print e

lo que no KeyError un KeyError de KeyError en caso de que la clave no exista.

También puede usar un segundo argumento para especificar el valor predeterminado, si la clave no está presente.