Registro de errores de Python

Me gustaría encontrar una manera de registrar cada error que obligue al intérprete de Python a salir para guardarse en un archivo, así como para imprimirlo en la pantalla. La razón por la que me gustaría hacer esto es que quiero mantener estadísticas sobre los tipos de errores que cometo al escribir código, con el objective de encontrar formas de evitar errores que cometo comúnmente en el futuro.

He estado intentando hacer esto escribiendo un contenedor para el intérprete de python usando el módulo de subproceso. Básicamente, ejecuta el intérprete de python, captura cualquier salida, analiza y guarda en un archivo, imprime la salida y usa matplotlib para hacer algunas cifras de resumen. Sin embargo, estoy teniendo problemas para obtener resultados de mi script de envoltorio en tiempo real. Por ejemplo, si el script que estoy ejecutando es:

import os import time for x in range(10): print "testing" time.sleep(10) 

y estoy usando subprocess.Popen () con p.communicate (), la envoltura esperará 100 segundos y luego imprimirá toda la salida. Me gustaría que la envoltura fuera lo más invisible posible, idealmente, en este caso, imprimiría “pruebas” una vez cada diez segundos.

Si alguien pudiera indicarme una buena manera de hacerlo, lo apreciaría enormemente.

¡Gracias!

Creo que simplemente puede reemplazar sys.excepthook con su propia función. Puedes leerlo en la documentación de Python .

Básicamente, le permite personalizar lo que sucede cuando una excepción se filtra hasta el punto de forzar al intérprete de Python a salir. Lo usas así:

 import sys def my_excepthook(type, value, tb): # you can log the exception to a file here print 'In My Exception Handler' # the following line does the default (prints it to err) sys.__excepthook__(type, value, tb) sys.excepthook = my_excepthook 

Probablemente también querrá ver el módulo de rastreo , para formatear el rastreo que recibe.