Obtenha o nome da classe à qual o objeto de exceção pertence:
e.__class__.__name__
e usar a função print_exc () também imprimirá o rastreamento da pilha, que é uma informação essencial para qualquer mensagem de erro.
Como isso:
from traceback import print_exc
class CustomException(Exception): pass
try:
raise CustomException("hi")
except Exception, e:
print 'type is:', e.__class__.__name__
print_exc()
# print "exception happened!"
Você obterá uma saída como esta:
type is: CustomException
Traceback (most recent call last):
File "exc.py", line 7, in <module>
raise CustomException("hi")
CustomException: hi
E após a impressão e análise, o código pode decidir não manipular exceções e apenas executar raise
:
from traceback import print_exc
class CustomException(Exception): pass
def calculate():
raise CustomException("hi")
try:
calculate()
except Exception, e:
if e.__class__ == CustomException:
print 'special case of', e.__class__.__name__, 'not interfering'
raise
print "handling exception"
Resultado:
special case of CustomException not interfering
E o intérprete imprime a exceção:
Traceback (most recent call last):
File "test.py", line 9, in <module>
calculate()
File "test.py", line 6, in calculate
raise CustomException("hi")
__main__.CustomException: hi
Após a raise
exceção original, continua a se propagar ainda mais na pilha de chamadas. ( Cuidado com a possível armadilha ) Se você criar uma nova exceção, ela carrega um novo rastreamento (mais curto) da pilha.
from traceback import print_exc
class CustomException(Exception): pass
def calculate():
raise CustomException("hi")
try:
calculate()
except Exception, e:
if e.__class__ == CustomException:
print 'special case of', e.__class__.__name__, 'not interfering'
#raise CustomException(e.message)
raise e
print "handling exception"
Resultado:
special case of CustomException not interfering
Traceback (most recent call last):
File "test.py", line 13, in <module>
raise CustomException(e.message)
__main__.CustomException: hi
Observe como o traceback não inclui a calculate()
função da linha 9
que é a origem da exceção original e
.
except:
(sem o bareraise
), exceto talvez uma vez por programa e, de preferência, não o faça.