Sé que print(e)(donde e es una excepción) imprime la excepción ocurrida, pero estaba tratando de encontrar el equivalente en Python de Java e.printStackTrace()que rastrea exactamente la excepción a qué línea ocurrió e imprime todo el rastro.
¿Alguien podría decirme el equivalente de e.printStackTrace()en Python?
java
python
exception
stack-trace
koool
fuente
fuente

format_excobtener una cadena.También existe
logging.exception.Salida:
(De http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ a través de Cómo imprimir el rastreo completo sin detener el programa? )
fuente
traceback.print_exc()?En Java, esto hace lo siguiente ( docs ):
Esto se usa así:
En Java, la secuencia de error estándar no tiene búfer para que la salida llegue de inmediato.
La misma semántica en Python 2 son:
Python 3
En Python 3, podemos obtener el rastreo directamente del objeto de excepción (que probablemente se comporta mejor para el código enhebrado). Además, stderr tiene un buffer de línea , pero la función de impresión obtiene un argumento de vaciado, por lo que esto se imprimirá inmediatamente en stderr:
Conclusión:
En Python 3, por lo tanto,
traceback.print_exc()aunque usasys.stderrde forma predeterminada , amortiguaría la salida y posiblemente la pierda. Entonces, para obtener la semántica más equivalente posible, en Python 3, useprintconflush=True.fuente
Agregando a los otros grandes respuestas, podemos usar el pitón
loggingde la bibliotecadebug(),info(),warning(),error(), ycritical()métodos. Citando de los documentos para Python 3.7.4 ,Lo que esto significa es que puede usar la
loggingbiblioteca de Python para generar undebug()mensaje u otro tipo de mensaje, y laloggingbiblioteca incluirá el seguimiento de la pila en su salida. Con esto en mente, podemos hacer lo siguiente:Y dará salida:
fuente