manuseio de erros personalizado com o módulo de registro de Python
garantindo que as exceções não sejadas sejam manipuladas adequadamente e o registro possa ser crucial para a solução de problemas e a manutenção da estabilidade da estabilidade da estabilidade da um aplicativo Python. Embora as exceções de captura e log manualmente sejam uma abordagem viável, ela pode ser tediosa e propensa a erros. Isso fornece uma maneira conveniente e sistemática de capturar e registrar informações detalhadas da exceção. Ao definir um manipulador de exceção personalizado, você pode interceptar todas as exceções não capturadas e lidar com elas conforme desejado. Aqui está um exemplo completo e robusto:
importar sistemas SYS importar log logger = logging.getLogger (__ name__) manipulador = logging.streamHandler (stream = sys.stdout) Logger.addhandler (manipulador) def handle_exception (exc_type, exc_value, exc_traceback): # Ignore o teclado interruptão para que o aplicativo possa sair com Ctrl C Se Issubclass (exc_type, keyboardInterrupt): sys .__ Excepthook __ (exc_type, exc_value, exc_traceback) retornar # Log the Uncathed Exception Logger.error ("Exceção não capturada", exc_info = (exc_type, exc_value, exc_traceback)) sys.ExcepThook = handle_exception # Código de exemplo para testar o manuseio de exceção personalizado Se __name__ == "__main__": REALMENTE RUNTimeError ("Teste não atendido")
explicação
este código:
import sys
import logging
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
def handle_exception(exc_type, exc_value, exc_traceback):
# Ignore KeyboardInterrupt so the application can exit with Ctrl C
if issubclass(exc_type, KeyboardInterrupt):
sys.__excepthook__(exc_type, exc_value, exc_traceback)
return
# Log the uncaught exception
logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))
sys.excepthook = handle_exception
# Example code to test the custom exception handling
if __name__ == "__main__":
raise RuntimeError("Test unhandled")
define um manipulador de exceção personalizado, handle_exception, que é invocado Quando ocorre uma exceção não capturada. Saia graciosamente. Para demonstrar o manuseio de erros personalizado. registra os detalhes da exceção ao manipulador configurado. Nesse caso, o manipulador de fluxo padrão é usado para produzir as informações de exceção para stdout. filtragem:
ignore certos tipos de exceções (por exemplo, teclado interrupto) usando a subclasse checking.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3