Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

223
Visualizações
¿Puedo hacer excepciones de salida de Python en una línea/a través del registro?

Estoy usando AWS y uso AWS cloudwatch para ver registros. Si bien las cosas no deberían fallar en AWS, podrían hacerlo. Acabo de tener un caso así. Luego busqué Traceback y obtuve las líneas

 Traceback (most recent call last):

sin el rastreo real. Tengo una configuración de registro estructurado que funciona (ver otra pregunta ) y me gustaría obtener rastreos de manera similar.

Así que en lugar de:

 Traceback (most recent call last): File "/home/math/Desktop/test.py", line 32, in <module> adf NameError: name 'adf' is not defined

algo como

 {"message": "Traceback (most recent call last):\n File \"/home/math/Desktop/test.py\", line 32, in <module>\n adf\n NameError: name 'adf' is not defined", "lineno": 35, "pathname": "/home/math/Desktop/test.py"}

o incluso mejor también con la cadena en formato JSON.

La única forma de lograr esto que se me ocurre es un bloque gigante de prueba y excepción. Al estilo Pokémon. ¿Hay una solución mejor?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede usar sys.excepthook . Se invoca cada vez que ocurre una excepción en su secuencia de comandos.

 import logging import sys import traceback def exception_logging(exctype, value, tb): """ Log exception by using the root logger. Parameters ---------- exctype : type value : NameError tb : traceback """ write_val = {'exception_type': str(exctype), 'message': str(traceback.format_tb(tb, 10))} logging.exception(str(write_val))

Luego, en su secuencia de comandos, debe anular el valor de sys.excepthook .

 sys.excepthook = exception_logging

Ahora, cada vez que ocurra una excepción, se registrará con su controlador de registro.

Nota: No olvide configurar el registrador antes de ejecutar esto

over 4 years ago · Santiago Trujillo Relatório

0

En caso de que alguien quiera que la excepción se registre en su formato predeterminado, pero en una línea (por cualquier motivo), según la respuesta aceptada:

 def exception_logging(exctype, value, tb): """ Log exception in one line by using the root logger. Parameters ---------- exctype : exception type value : seems to be the Exception object (with its message) tb : traceback """ logging.error(''.join(traceback.format_exception(exctype, value, tb)))

Tenga en cuenta también que utiliza logging.error() en lugar de logging.exception(), que también imprimió una línea adicional "NoneType: None".
También tenga en cuenta que solo parece funcionar con excepciones no detectadas.
Para registrar excepciones detectadas, visite ¿Cómo puedo dar formato a los seguimientos de pila de excepciones en el registro de Python? y ver también mi respuesta.

over 4 years ago · Santiago Trujillo Relatório

0

Una ligera variación: si ejecuta una aplicación Flask, puede hacer esto:

 @app.errorhandler(Exception) def exception_logger(error): """Log the exception.""" logger.exception(str(error)) return str(error)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda