Me gustaría saber cómo salir de Python sin tener un volcado de rastreo en la salida.
Todavía quiero poder devolver un código de error, pero no quiero mostrar el registro de rastreo.
Quiero poder salir usando exit(number)
sin seguimiento, pero en caso de una excepción (no una salida) quiero el seguimiento.
Respuestas:
Probablemente encuentre una excepción y el programa se está cerrando debido a esto (con un rastreo). Por lo tanto, lo primero que debe hacer es detectar esa excepción, antes de salir limpiamente (tal vez con un mensaje, ejemplo dado).
Pruebe algo como esto en su
main
rutina:fuente
except Exception:
asys.exit(0)
, ambos inclusive. Ya es el comportamiento predeterminado imprimir un rastreo en todas las excepciones no manejadas y salir después de que finalice el código, entonces, ¿por qué molestarse en hacer lo mismo manualmente?sys.exit()
debe usarse para programas.exit()
está destinado a proyectiles interactivos. Ver ¿ La diferencia entre exit () y sys.exit () en Python? .¿Quizás estás tratando de atrapar todas las excepciones y esto está atrapando la
SystemExit
excepción planteada porsys.exit()
?En general, usar
except:
sin nombrar una excepción es una mala idea. Capturará todo tipo de cosas que no desea atrapar, comoSystemExit
, y también puede enmascarar sus propios errores de programación. Mi ejemplo anterior es tonto, a menos que esté haciendo algo en términos de limpieza. Puedes reemplazarlo con:Si necesita salir sin subir
SystemExit
:Hago esto, en un código que se ejecuta en unittest y llamadas
fork()
. Unittest se obtiene cuando se eleva el proceso bifurcadoSystemExit
. ¡Este es definitivamente un caso de esquina!fuente
SystemExit
solo para llamarsys.exit(e)
? Eliminar ambas líneas tiene el mismo efecto. Además, la limpieza pertenece afinally:
, noexcept Exception: ... raise
.fuente
algo así
import sys; sys.exit(0)
?fuente
El siguiente código no generará una excepción y saldrá sin un rastreo:
Consulte esta pregunta y las respuestas relacionadas para obtener más detalles. Sorprendido por qué todas las demás respuestas son tan complicadas.
fuente
Es una práctica mucho mejor evitar usar sys.exit () y, en su lugar, generar / manejar excepciones para permitir que el programa termine limpiamente. Si desea desactivar el rastreo, simplemente use:
Puede configurar esto en la parte superior de su secuencia de comandos para aplastar toda la salida de rastreo, pero prefiero usarla con más moderación, por ejemplo, "errores conocidos" donde quiero que la salida esté limpia, por ejemplo, en el archivo foo.py:
Si se detecta CalledProcessError, el resultado se verá así:
Si se produce cualquier otro error, todavía obtenemos la salida de rastreo completo.
fuente
sys.trackbacklimit
en Python 3, vea esta respuesta .Use la función de pitón incorporada quit () y listo. No es necesario importar ninguna biblioteca. Estoy usando python 3.4
fuente
Lo haría de esta manera:
fuente
Qué pasa
Sin rastreo y de alguna manera más explícito.
fuente
fuente