Como posso obter o nome de uma exceção que foi gerada em Python?
por exemplo,
try:
foo = bar
except Exception as exception:
name_of_exception = ???
assert name_of_exception == 'NameError'
print "Failed with exception [%s]" % name_of_exception
Por exemplo, estou capturando várias (ou todas) exceções e desejo imprimir o nome da exceção em uma mensagem de erro.
python
exception
exception-handling
Rob Bednark
fonte
fonte
except NameError:
) para começar?traceback
módulo da biblioteca padrão , que tem funções que fazem uma boa formatação de exceções e rastreamentos.except
instrução, mas a entrada de log é muito semelhante em cada caso.Respostas:
Aqui estão algumas maneiras diferentes de obter o nome da classe da exceção:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
por exemplo,
fonte
Isso funciona, mas parece que deve haver uma maneira mais fácil e direta?
fonte
except Exception as exception
com o tipo de exceção que você gostaria de pegar, ou sejaexcept NameError as exception
.Você também pode usar
sys.exc_info()
.exc_info()
retorna 3 valores: tipo, valor, traceback. Na documentação: https://docs.python.org/3/library/sys.html#sys.exc_infofonte
Se você quiser o nome de classe totalmente qualificado (por exemplo, em
sqlalchemy.exc.IntegrityError
vez de apenasIntegrityError
), você pode usar a função abaixo, que tirei da resposta incrível de MB para outra pergunta (acabei de renomear algumas variáveis para atender aos meus gostos):Exemplo:
fonte
As outras respostas aqui são ótimas para fins de exploração, mas se o objetivo principal for registrar a exceção (incluindo o nome da exceção), talvez considere o uso de logging.exception em vez de print?
fonte