script programa lista funciones ejecutar desde cómo consola archivos archivo python exit traceback

programa - input python



¿Cómo salir de Python sin trazabilidad? (10)

Me gustaría saber cómo salir de Python sin tener un volcado de rastreo en la salida.

Todavía quiero querer poder devolver un código de error pero no quiero mostrar el registro de rastreo.

Quiero poder salir usando exit(number) sin rastreo, pero en caso de una excepción (no una salida) quiero el rastreo.


¿Quizás está intentando detectar todas las excepciones y esto está SystemExit excepción SystemExit provocada por sys.exit() ?

import sys try: sys.exit(1) # Or something that calls sys.exit() except SystemExit as e: sys.exit(e) except: # Cleanup and reraise. This will print a backtrace. # (Insert your cleanup code here.) raise

En general, usar except: sin nombrar una excepción es una mala idea. SystemExit todo tipo de cosas que no desea capturar, como SystemExit , 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. Podrías reemplazarlo con:

import sys sys.exit(1) # Or something that calls sys.exit().

Si necesita salir sin elevar SystemExit :

import os os._exit(1)

Hago esto, en el código que se ejecuta en unittest y llama a fork() . Unittest obtiene cuando el proceso bifurcado aumenta SystemExit . ¡Este es definitivamente un caso de esquina!


El siguiente código no generará una excepción y se cerrará sin un rastreo:

import os os._exit(1)

Ver esta pregunta y respuestas relacionadas para más detalles. Sorprendió por qué todas las otras respuestas están tan sobrecargadas.


Es una práctica mucho mejor evitar el uso de sys.exit () y, en su lugar, generar / manejar excepciones para permitir que el programa finalice limpiamente. Si desea desactivar el rastreo, simplemente use:

sys.trackbacklimit=0

Puede establecer esto en la parte superior de su script 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:

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 se detecta CalledProcessError, la salida se verá así:

[me@test01 dev]$ ./foo.py usage: uptime [-V] -V display version Process failed subprocess.CalledProcessError: Command ''[''uptime'', ''--help'']'' returned non-zero exit status 1

Si ocurre cualquier otro error, aún obtendremos la salida de rastreo completo.


Lo haría de esta manera:

import sys def do_my_stuff(): pass if __name__ == "__main__": try: do_my_stuff() except SystemExit, e: print(e)


Presumiblemente se está encontrando una excepción y el programa está saliendo debido a esto (con un rastreo). Por lo tanto, lo primero que debe hacer es capturar esa excepción, antes de salir limpiamente (tal vez con un mensaje, ejemplo dado).

Intenta algo como esto en tu rutina main :

import sys, traceback def main(): try: do main program stuff here .... except KeyboardInterrupt: print "Shutdown requested...exiting" except Exception: traceback.print_exc(file=sys.stdout) sys.exit(0) if __name__ == "__main__": main()


Qué pasa

import sys .... .... .... sys.exit("I am getting the heck out of here!")

Sin rastro y de alguna manera más explícita.


Usa la función python incorporada quit () y eso es todo. No es necesario importar ninguna biblioteca. Estoy usando python 3.4


algo como import sys; sys.exit(0) import sys; sys.exit(0) ?


# Pygame Example import pygame, sys from pygame.locals import * pygame.init() DISPLAYSURF = pygame.display.set_mode((400, 300)) pygame.display.set_caption(''IBM Emulator'') BLACK = (0, 0, 0) GREEN = (0, 255, 0) fontObj = pygame.font.Font(''freesansbold.ttf'', 32) textSurfaceObj = fontObj.render(''IBM PC Emulator'', True, GREEN,BLACK) textRectObj = textSurfaceObj.get_rect() textRectObj = (10, 10) try: while True: # main loop DISPLAYSURF.fill(BLACK) DISPLAYSURF.blit(textSurfaceObj, textRectObj) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() pygame.display.update() except SystemExit: pass


import sys sys.exit(1)