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_exc
obtener 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.stderr
de forma predeterminada , amortiguaría la salida y posiblemente la pierda. Entonces, para obtener la semántica más equivalente posible, en Python 3, useprint
conflush=True
.fuente
Agregando a los otros grandes respuestas, podemos usar el pitón
logging
de 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
logging
biblioteca de Python para generar undebug()
mensaje u otro tipo de mensaje, y lalogging
biblioteca incluirá el seguimiento de la pila en su salida. Con esto en mente, podemos hacer lo siguiente:Y dará salida:
fuente