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 aos._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)