Si bien la respuesta de James es casi siempre lo que realmente quiere, que no es exactamente lo que pidió el PO:
¿Hay una forma de exceptuar cualquier excepción arbitraria y poder imprimir el mensaje de excepción en el bloque except?
Exception
en realidad no manejan todos excepciones, sólo todas las excepciones que por lo general se desea capturar. En particular, en 2.5 y posteriores:
Todas las excepciones integradas que no salen del sistema se derivan de esta clase. Todas las excepciones definidas por el usuario también deben derivarse de esta clase.
Esto deja fuera algunas cosas:
- excepciones de salir del sistema incorporadas, como un
KeyboardInterrupt
del usuario golpear ^C
(2.5 y posteriores)
- excepciones definidas por el usuario que don 't siga que 'debería'
muy de vez en cuando, usted quiere manejar las cosas como KeyboardInterrupt
, en cuyo caso se utiliza en lugar de BaseException
Exception
.(Ver Exception hierarchy para obtener una lista de las cuales son excepciones y no son Exception
subclases.) Por lo tanto:
try:
# stuff
except BaseException as e:
print e
Y (por lo general temporalmente durante la depuración) a veces usted realmente quiere manejar absolutamente todo. En 2.7, eso incluye excepciones definidas como clases de estilo antiguo; en 2.5 y anteriores, también incluye cadenas. La única manera de manejar todas esas posibilidades es usar un desnudo except
y luego usar sys.exc_info
(y, opcionalmente, volver a raise
nada que no desea manejar):
try:
# stuff
except:
type, value, traceback = sys.exc_info()
print value
Como nota al margen, me Estoy usando la sintaxis de estilo nuevo except
(except Exception as e
) arriba. Esto funciona en 2.6 y posteriores, incluyendo 3.x. La sintaxis antigua (except Exception, e
) está obsoleta en 2.6 y deja de funcionar en 3.0, pero si desea trabajar con versiones 2.x anteriores, debe usarla.
Tenga en cuenta que la sintaxis 'Exception, e' está en desuso a partir de 2.6 y deja de funcionar a partir de 3.0. Si tiene un código que debe funcionar tanto con 2.x como con 3.x, use 'Exception as e' en su lugar. (Sin embargo, si necesita trabajar con 2.5 o anterior, debe usar esta sintaxis). – abarnert