¿Cómo puedo escribir un try
/ except
bloque que capture todas las excepciones?
python
exception-handling
user469652
fuente
fuente
sys.stderr
y posiblemente se registran los mensajes de error detectados . Esa es una excepción perfectamente válida y común.try: whatever() except Exception as e: exp_capture()
:?Respuestas:
Puedes pero probablemente no deberías:
Sin embargo, esto también detectará excepciones como
KeyboardInterrupt
y generalmente no quieres eso, ¿verdad? A menos que vuelva a aumentar la excepción de inmediato, consulte el siguiente ejemplo de los documentos :fuente
except Exception:
lo desnudo, excepto que también tendrá que capturar las Excepciones Base.Además de una
except:
cláusula simple (que como otros han dicho que no debe usar), simplemente puede atraparException
:Normalmente, solo consideraría hacer esto en el nivel más externo de su código si, por ejemplo, desea manejar cualquier excepción no detectada antes de finalizar.
La ventaja de
except Exception
Over the bareexcept
es que hay algunas excepciones que no atraparán, más obviamenteKeyboardInterrupt
ySystemExit
: si las atrapó y se las tragó, podría dificultar que cualquiera salga de su script.fuente
Exception
. Tenga en cuenta que es imposible plantear unint
como una excepción, e intentar hacerlo genera unaTypeError
excepción, que es lo que sería captado por laexcept Exception
cláusula adjunta en tal caso. Por otro lado, una clase de estilo antiguo se puede generar y califica como una "no excepción" que no es una subclaseException
; esto se captará con unaexcept
cláusula simple pero no con unaexcept Exception
cláusula.TypeError
sys.exit()
generalmente significa que espera que la aplicación finalice, pero si atrapa SystemExit no lo hará. Del mismo modo, si presiona control-C en un script en ejecución (Ctrl-break en Windows), espera que el programa se detenga, no detecte el error y continúe. Pero puede atrapar cualquiera / ambos de estos si desea hacer la limpieza antes de existir.Puede hacer esto para manejar excepciones generales
fuente
Para capturar todas las excepciones posibles, captura
BaseException
. Está en la parte superior 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
Pero como otras personas mencionaron, generalmente no necesitaría esto, solo para casos específicos.
fuente
Ejemplo muy simple, similar al que se encuentra aquí:
http://docs.python.org/tutorial/errors.html#defining-clean-up-actions
Si está intentando atrapar TODAS las excepciones, coloque todo su código dentro de la instrucción "try:", en lugar de 'print "Realizando una acción que puede lanzar una excepción".
En el ejemplo anterior, vería la salida en este orden:
1) Realizar una acción que puede arrojar una excepción.
2) Finalmente se llama directamente después de ejecutar la declaración de prueba, ya sea que se lance una excepción o no.
3) "¡Se produjo una excepción!" o "¡Todo se ve genial!" dependiendo de si se lanzó una excepción.
¡Espero que esto ayude!
fuente
Hay varias formas de hacer esto en particular con Python 3.0 y superior
Enfoque 1
Este es un enfoque simple pero no recomendado porque no sabría exactamente qué línea de código está lanzando realmente la excepción:
Enfoque 2
Se recomienda este enfoque porque proporciona más detalles sobre cada excepción. Incluye:
El único inconveniente es que el tracback debe importarse.
fuente
Acabo de descubrir este pequeño truco para probar si hay nombres de excepción en Python 2.7. A veces he manejado excepciones específicas en el código, por lo que necesitaba una prueba para ver si ese nombre está dentro de una lista de excepciones manejadas.
fuente
Vale la pena mencionar que esto no es una codificación Python adecuada. Esto detectará también muchos errores que quizás no desee detectar.
fuente