Es una práctica mucho mejor evitar el uso de sys.exit() y en lugar de subir/manejar excepciones para permitir que el programa termine de forma limpia. Si desea desactivar el rastreo, sólo tiene que utilizar:
sys.trackbacklimit=0
Es posible ajustar esta en la parte superior de su script para aplastar toda la salida de rastreo, pero prefiero utilizarlo con más moderación, por ejemplo, "los errores conocidos", donde Quiero que la salida esté limpia, por ejemplo en el archivo foo.py:
import sys
from subprocess import *
try:
check_call([ 'uptime', '--help' ])
except CalledProcessError:
sys.tracebacklimit=0
print "Process failed"
raise
print "This message should never follow an error."
Si CalledProcessError es capturado, la salida se verá así:
[[email protected] dev]$ ./foo.py
usage: uptime [-V]
-V display version
Process failed
subprocess.CalledProcessError: Command '['uptime', '--help']' returned non-zero exit status 1
Si se produce cualquier otro error, todavía conseguimos la salida de rastreo completo.
sys.exit() detiene la ejecución sin imprimir una traza inversa, lo que provoca una excepción ... su pregunta describe exactamente cuál es el comportamiento predeterminado, por lo que no debe cambiar nada. –
@Luper Es muy fácil comprobar que sys.exit() arroja SystemExit! – Val
Dije que no imprime un rastreo, no es que no genere una excepción. –