exception-handling matplotlib - ¿Cómo registrar la excepción de Python?




xticks seaborn (5)

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo registrar una excepción en Python?

He visto algunas opciones y descubrí que puedo acceder a los detalles de la excepción real usando este código:

import sys
import traceback

try:
    1/0
except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_exception(exc_type, exc_value, exc_traceback)

Me gustaría de alguna manera obtener la cadena print_exception() arroja a stdout para que pueda iniciar sesión.


Answers

Eche un vistazo a logging.exception ( logging )

import logging 
def foo():
    try:
        some_code()
    except:
        logging.exception('')

Esto debería encargarse automáticamente de obtener el rastreo de la excepción actual y de iniciar sesión correctamente.


En Python 3.5 puede pasar una instancia de excepción en el argumento exc_info:

import logging
try:
    1/0
except Exception as e:
   logging.error('Error at %s', 'division', exc_info=e)

Para responder a su pregunta, puede obtener la versión de cadena de print_exception() utilizando la función print_exception() . Devuelve el mensaje de seguimiento como una lista de cadenas en lugar de imprimirlo en stdout, para que pueda hacer lo que quiera con él. Por ejemplo:

import sys
import traceback

try:
    asdf
except NameError:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
    print ''.join('!! ' + line for line in lines)  # Log it or whatever here

Esto muestra:

!! Traceback (most recent call last):
!!   File "<stdin>", line 2, in <module>
!! NameError: name 'asdf' is not defined

Sin embargo, definitivamente recomendaría usar el módulo de registro de Python estándar, como lo sugiere rlotun. No es lo más fácil de configurar, pero es muy personalizable.


En primer lugar, considere usar un tipo de excepción adecuado en su cláusula except. Luego, al nombrar la excepción, puede imprimirla:

try:
    1/0
except Exception as e:
    print e

Depende de tu versión de Python, debes usar

except Exception, e

Lea primero las respuestas existentes, esto es solo un apéndice.

Tenga en cuenta que puede generar excepciones con o sin argumentos.

Ejemplo:

raise SystemExit

sale del programa pero es posible que desee saber qué sucedió. Así que puede usar esto.

raise SystemExit("program exited")

esto imprimirá "programa salido" a stderr antes de cerrar el programa.





python exception-handling logging