Parece que python admite muchos comandos diferentes para detener la ejecución del script.
Las opciones que he encontrado son: quit()
, exit()
, sys.exit()
,os._exit()
¿Me he perdido alguno? ¿Cual es la diferencia entre ellos? ¿Cuándo usarías cada uno?
os.abort()
Respuestas:
Déjame darte información sobre ellos:
quit()
simplemente plantea laSystemExit
excepción.Además, si lo imprime, le dará un mensaje:
Esta funcionalidad se incluyó para ayudar a las personas que no conocen Python. Después de todo, una de las cosas más probables que un novato intentará salir de Python es escribir
quit
.Sin embargo,
quit
debe no ser utilizado en el código de producción. Esto se debe a que solo funciona si elsite
módulo está cargado. En cambio, esta función solo debe usarse en el intérprete.exit()
es un alias paraquit
(o viceversa). Existen juntos simplemente para hacer que Python sea más fácil de usar.Además, también da un mensaje cuando se imprime:
Sin embargo, al igual que
quit
,exit
se considera malo usarlo en el código de producción y debe reservarse para el intérprete. Esto se debe a que también depende delsite
módulo.sys.exit()
También plantea laSystemExit
excepción. Esto significa que es lo mismoquit
yexit
a ese respecto.Sin embargo, a diferencia de esos dos,
sys.exit
se considera bueno usarlo en el código de producción. Esto se debe a que elsys
módulo siempre estará allí.os._exit()
sale del programa sin llamar a los manipuladores de limpieza, vaciando los buffers stdio, etc . Por lo tanto, no es una forma estándar de salir y solo debe usarse en casos especiales. El más común de estos está en los procesos secundarios creados poros.fork
.Tenga en cuenta que, de los cuatro métodos dados, solo este es único en lo que hace.
En resumen, los cuatro métodos salen del programa. Sin embargo, los dos primeros se consideran malos para usar en el código de producción y el último es una forma sucia no estándar que solo se usa en escenarios especiales. Por lo tanto, si desea salir de un programa normalmente, ir con el tercer método:
sys.exit
.O, incluso mejor en mi opinión, puede hacer directamente lo que
sys.exit
hace detrás de escena y ejecutar:De esta manera, no necesita importar
sys
primero.Sin embargo, esta elección es simplemente una en estilo y depende exclusivamente de usted.
fuente
quit
yexit
salga del shell mientrassys.exit
no lo hace.sys.exit()
No es una forma confiable de cerrar. Si se llama dentro de un hilo, terminará solo ese hilo a menos que esté en el hilo principal. Esto puede conducir a muchos casos en los que el programa continúa porque la llamada no estaba en el hilo principal, especialmente porque algunos intérpretes enhebrarán invisiblemente las llamadas.end
comando que lo haríaraise SystemExit
. No veo por qué no puede haber algo así de simple, como en BASIC.print
se cambió de una declaración a una función. Es fácil agregar sintaxis, pero su costo es complejo.sys.exit()
?Las funciones *
quit()
,exit()
ysys.exit()
funcionan de la misma manera: provocan laSystemExit
excepción. Así que no hay diferencia real, excepto quesys.exit()
siempre está disponible, peroexit()
yquit()
sólo están disponibles si elsite
módulo ha sido importada.La
os._exit()
función es especial, sale inmediatamente sin llamar a ninguna función de limpieza (por ejemplo, no vacía los búferes). Está diseñado para casos de uso altamente especializados ... básicamente, solo en el niño después de unaos.fork()
llamada.Conclusión
Uso
exit()
oquit()
en la REPL.Úselo
sys.exit()
en scripts, oraise SystemExit()
si lo prefiere.Use
os._exit()
para que los procesos secundarios salgan después de una llamada aos.fork()
.Todos estos pueden llamarse sin argumentos, o puede especificar el estado de salida, por ejemplo,
exit(1)
oraise SystemExit(1)
salir con el estado 1. Tenga en cuenta que los programas portátiles están limitados a los códigos de estado de salida en el rango 0-255, siraise SystemExit(256)
en muchos sistemas esto se truncará y su proceso realmente saldrá con el estado 0.Notas al pie
* En realidad,
quit()
yexit()
son objetos de instancia invocables, pero creo que está bien llamarlos funciones.fuente
Diferentes medios de salida
os._exit()
:exit(0)
:exit(1)
:sys.exit()
:quit()
:Resumen
Básicamente, todos hacen lo mismo, sin embargo, también depende de para qué lo estés haciendo.
No creo que hayas dejado nada fuera y recomendaría acostumbrarte
quit()
oexit()
.Utilizaría
sys.exit()
yos._exit()
principalmente si está utilizando archivos grandes o está utilizando python para controlar el terminal.De lo contrario, utilice principalmente
exit()
oquit()
.fuente
sys.exit
Es la forma canónica de salir.Internamente
sys.exit
solo aumentaSystemExit
. Sin embargo, llamarsys.exit
es más idiomático que subirSystemExit
directamente.os.exit
es una llamada de sistema de bajo nivel que sale directamente sin llamar a ningún controlador de limpieza.quit
yexit
existen solo para proporcionar una salida fácil del indicador de Python. Esto es para usuarios nuevos o usuarios que ingresaron accidentalmente el indicador de Python y no desean conocer la sintaxis correcta. Es probable que intenten escribirexit
oquit
. Si bien esto no saldrá del intérprete, al menos emite un mensaje que les indica una salida:Esto es esencialmente un truco que utiliza el hecho de que el intérprete imprime
__repr__
cualquier expresión que ingrese en el indicador.fuente