Python sys.exit no funciona en try

Python 2.7.5 (default, Feb 26 2014, 13:43:17) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> try: ... sys.exit() ... except: ... print "in except" ... in except >>> try: ... sys.exit(0) ... except: ... print "in except" ... in except >>> try: ... sys.exit(1) ... except: ... print "in except" ... in except 

¿Por qué no puedo activar sys.exit () en el bash, alguna sugerencia … !!!

El código publicado aquí tiene todos los detalles de la versión.

He intentado todas las formas posibles que conozco para activarlo, pero fallé. Se llega al bloque ‘excepto’.

Gracias por adelantado..

sys.exit() genera una excepción, a saber, SystemExit . Es por eso que aterrizas en el bloque except .

Vea este ejemplo:

 import sys try: sys.exit() except: print(sys.exc_info()[0]) 

Esto te da:

  

Aunque no puedo imaginar que uno tenga una razón práctica para hacerlo, puede usar este constructo:

 import sys try: sys.exit() # this always raises SystemExit except SystemExit: print("sys.exit() worked as expected") except: print("Something went horribly wrong") # some other exception got raised 

basado en wiki de python:

Como exit () finalmente “solo” genera una excepción, solo saldrá del proceso cuando se le llame desde el subproceso principal, y la excepción no se intercepta.

Y:

La función de exit no se llama cuando el progtwig es eliminado por una señal, cuando se detecta un error interno fatal de Python, o cuando se llama a os._exit() .

Por lo tanto, si usa sys.exit() dentro de un bloque de try python después de boost la excepción SystemExit python se niega a completar la funcionalidad de las exits y ejecuta el bloque de exception .

Ahora, desde la perspectiva de la progtwigción, básicamente no necesita poner algo que sabe que definitivamente genera una excepción en un bloque de try . En su lugar, puede elevar una excepción de SystemExit manualmente o como un enfoque más Pythonic si no quiere perder las funciones respectivas de sys.exit() como pasar un argumento opcional a su constructor, puede llamar a sys.exit() de una manera finally , else o incluso except bloque.

Método 1 (no recomendado)

 try: # do stuff except some_particular_exception: # handle this exception and then if you want # do raise SystemExit else: # do stuff and/or do raise SystemExit finally: # do stuff and/or do raise SystemExit 

Método 2 (recomendado):

 try: # do stuff except some_particular_exception: # handle this exception and then if you want # do sys.exit(stat_code) else: # do stuff and/or do sys.exit(stat_code) finally: # do stuff and/or do sys.exit(stat_code)