try:
something here
except:
print('the whatever error occurred.')
Como posso imprimir o erro / exceção no meu except:
bloco?
python
exception
error-handling
TIMEX
fonte
fonte
Respostas:
Para Python 2.6 e posterior e Python 3.x:
Para Python 2.5 e versões anteriores, use:
fonte
str( KeyError('bad'))
=>'bad'
- não informa tipo de exceçãoprint(repr(e))
; aException.__str__
implementação base retorna apenas a mensagem de exceção, não o tipo. Ou use otraceback
módulo, que possui métodos para imprimir a exceção atual, formatada ou o rastreamento completo.O
traceback
módulo fornece métodos para formatar e imprimir exceções e seus rastreios, por exemplo, isso imprimiria exceção como o manipulador padrão:Resultado:
fonte
error_message = traceback.format_exc()
except Exception as ex:
...sys.exc_info()
função e atraceback.print_exc()
função obtém a partir daí. Você só precisará transmitir uma exceção explicitamente quando não estiver lidando com uma exceção ou quando desejar mostrar informações com base em uma exceção diferente.No Python 2.6 ou superior , é um pouco mais limpo:
Nas versões mais antigas, ainda é bastante legível:
fonte
Caso você deseje transmitir cadeias de erro, aqui está um exemplo de Erros e Exceções (Python 2.6)
fonte
(Eu deixaria isso como um comentário na resposta de @ jldupont, mas não tenho reputação suficiente.)
Eu já vi respostas como a resposta da @ jldupont em outros lugares também. FWIW, acho importante notar que isso:
imprimirá a saída de erro como
sys.stdout
padrão. Uma abordagem mais apropriada para o tratamento de erros em geral seria:(Observe que você precisa fazer
import sys
isso funcionar.) Dessa forma, o erro é impresso emSTDERR
vez deSTDOUT
, o que permite a saída / análise / redirecionamento adequados / etc. Entendo que a pergunta era estritamente sobre 'imprimir um erro', mas parece importante apontar as melhores práticas aqui, em vez de deixar de fora esses detalhes que podem levar a códigos não padronizados para quem eventualmente não aprender melhor.Não usei o
traceback
módulo como na resposta do Cat Plus Plus, e talvez seja o melhor caminho, mas pensei em lançar isso lá fora.fonte
Python 3:
logging
Em vez de usar a
print()
função básica , ologging
módulo mais flexível pode ser usado para registrar a exceção. Ologging
módulo oferece muitas funcionalidades extras, por exemplo, registrando mensagens em um determinado arquivo de log, registrando mensagens com registros de data e hora e informações adicionais sobre onde o log ocorreu. (Para mais informações, consulte a documentação oficial .)O registro de uma exceção pode ser feito com a função no nível do módulo, da seguinte
logging.exception()
maneira:Resultado:
Notas:
a função
logging.exception()
deve ser chamada apenas de um manipulador de exceçõeso
logging
módulo não deve ser usado dentro de um manipulador de log para evitar umRecursionError
(obrigado @PrakharPandey)Níveis de log alternativos
Também é possível registrar a exceção com outro nível de log usando o argumento de palavra-chave da seguinte
exc_info=True
maneira:fonte
Um aumento de erro de liner pode ser feito com instruções assert, se é isso que você deseja fazer. Isso ajudará você a escrever código estaticamente corrigível e a verificar erros com antecedência.
fonte
É possível controlar praticamente quais informações do traceback serão exibidas / registradas ao capturar exceções.
O código
produziria o seguinte rastreamento:
Imprimir / Registrar o rastreamento completo
Como já mencionado, você pode capturar todo o traceback usando o módulo traceback:
Isso produzirá a seguinte saída:
Você pode conseguir o mesmo usando o log:
Resultado:
Nome / mensagem do erro de impressão / registro apenas
Você pode não estar interessado em todo o rastreamento, mas apenas nas informações mais importantes, como Nome da exceção e Mensagem de exceção, use:
Resultado:
fonte