Quiero comprobar errores en un determinado archivo en segundo plano, pero el flujo de error estándar que está siendo controlado por el programa en el primer plano y los errores en el archivo en la pregunta no se muestra. Puedo usar el logging módulo y escribir en un archivo de salida, aunque. Me preguntaba ¿cómo puedo usar esto para registro de todas las excepciones, errores y sus trazas de retorno.

1 Comentario

  1. 55

    Es probablemente una mala idea para el registro de cualquier excepción dentro del programa, dado que Python utiliza también de excepciones para el flujo de control normal.

    Por lo tanto, sólo debe de registro uncaught excepciones. Usted puede hacer esto fácilmente mediante un registrador de () método, una vez que usted tiene un objeto de excepción.

    Para manejar todos los uncaught excepciones, usted puede ya sea envolver el guión del punto de entrada en un try...except bloque, o mediante la instalación de un custom controlador de excepción por la re-asignación de sys.excepthook():

    import logging
    import sys
    
    logger = logging.getLogger('mylogger')
    # Configure logger to write to a file...
    
    def my_handler(type, value, tb):
        logger.exception("Uncaught exception: {0}".format(str(value)))
    
    # Install exception handler
    sys.excepthook = my_handler
    
    # Run your main script here:
    if __name__ == '__main__':
        main()
    • Gracias! Esto es exactamente lo que yo necesitaba.
    • No es que buena idea para anexar sys.__excepthook__(type, value, tb) a su my_handler, por lo que puede procesar acciones por defecto en la excepción?
    • Beyer: Neat. Tener logger.exception("Uncaught exception: {0}: {1}".format(str(value.__class__.__name__), str(value))) da en mi caso ERROR - Uncaught exception: IndexError: list index out of range y grabados por alguna razón None. ¿Cómo puedo obtener también la completa trazabilidad? tb parece ser una de rastreo de objeto, sino traceback.print_tb(tb) también sólo escupe None.
    • consulte esta receta, que se basa en la exc_info kwarg para registro de la traza, también. Parece que sólo funcionan con logger.error o logger.critical, pero no con logger.exception.

Dejar respuesta

Please enter your comment!
Please enter your name here