pass - try catch python example
Sobre la captura de CUALQUIER excepción (7)
¿Cómo puedo escribir un bloque try
/ except
que atrapa todas las excepciones?
Acabo de descubrir este pequeño truco para probar nombres de excepción en Python 2.7. A veces he manejado excepciones específicas en el código, así que necesitaba una prueba para ver si ese nombre está dentro de una lista de excepciones manejadas.
try:
raise IndexError #as test error
except Exception as e:
excepName = type(e).__name__ # returns the name of the exception
Aparte de una cláusula except:
(que, como otros han dicho que no debes usar), simplemente puedes capturar Exception
:
import traceback
import logging
try:
whatever()
except Exception as e:
logging.error(traceback.format_exc())
# Logs the error appropriately.
Normalmente, solo consideraría hacer esto en el nivel más externo de su código si, por ejemplo, quisiera manejar cualquier excepción no detectada antes de terminar.
La ventaja de except Exception
over the bare es que hay algunas excepciones que no se SystemExit
, obviamente KeyboardInterrupt
y SystemExit
: si las atrapa y las traga, puede hacer que sea difícil que alguien salga de su script.
Ejemplo muy simple, similar al encontrado aquí:
http://docs.python.org/tutorial/errors.html#defining-clean-up-actions
Si intenta detectar TODAS las excepciones, coloque todo el código dentro de la declaración "try:", en lugar de "imprimir" Realizar una acción que puede generar una excepción ".
try:
print "Performing an action which may throw an exception."
except Exception, error:
print "An exception was thrown!"
print str(error)
else:
print "Everything looks great!"
finally:
print "Finally is called directly after executing the try statement whether an exception is thrown or not."
En el ejemplo anterior, verías la salida en este orden:
1) Realizar una acción que puede lanzar una excepción.
2) Finalmente, se llama directamente después de ejecutar la instrucción try si se lanza una excepción o no.
3) "¡Se lanzó una excepción!" o "¡Todo se ve genial!" Dependiendo de si se lanzó una excepción.
¡Espero que esto ayude!
Para capturar todas las excepciones posibles, capture BaseException
. Está en la cima de la jerarquía de excepciones:
Python 3: https://docs.python.org/3.5/library/exceptions.html#exception-hierarchy
Python 2.7: https://docs.python.org/2.7/library/exceptions.html#exception-hierarchy
try:
something()
except BaseException as error:
print(''An exception occurred: {}''.format(error))
Pero como mencionaron otras personas, generalmente no debes hacer esto, a menos que tengas una muy buena razón.
Puedes hacer esto para manejar excepciones generales
try:
a = 2/0
except Exception as e:
print e.__doc__
print e.message
Puedes pero probablemente no deberías:
try:
do_something()
except:
print "Caught it!"
Sin embargo, esto también detectará excepciones como KeyboardInterrupt
y normalmente no quieres eso, ¿verdad? A menos que vuelva a elevar la excepción de inmediato, consulte el siguiente ejemplo de la documentación :
try:
f = open(''myfile.txt'')
s = f.readline()
i = int(s.strip())
except IOError as (errno, strerror):
print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
print "Could not convert data to an integer."
except:
print "Unexpected error:", sys.exc_info()[0]
raise
try:
whatever()
except:
# this will catch any exception or error
Vale la pena mencionar que esto no es una codificación Python adecuada. Esto también detectará muchos errores que tal vez no quiera detectar.