Diferencia entre salida (0) y salida (1) en Python

167

¿Cuál es la diferencia entre exit(0)y exit(1)en Python?

Intenté mirar alrededor pero no encontré una pregunta específica en estas líneas. Si ya ha sido respondido, un enlace sería suficiente.

buscador
fuente
9
Aquí hay un enlace a exit()los documentos , que me llevó una eternidad encontrar.
Ryne Everett
Acabo de darme cuenta de que hay algo exit(0)que se discute en esta pregunta y también uno con un guión bajo _exit(0), la diferencia se explica aquí
cardamomo
Lo bueno de estos códigos es que se pueden usar directamente en una ifdeclaración en un bashcontenedor, por lo que se pueden tomar medidas adicionales independientemente de si el programa Python tiene éxito o no, o si generó un estado distinto de cero.
SDsolar
raro, si 0 es Falso y 1 es Verdadero en Python, pensarías que los números significarían lo contrario
Monica Heddneck

Respuestas:

248

0 y 1 son los códigos de salida.

exit(0) significa una salida limpia sin errores / problemas

exit(1) significa que hubo algún problema / error / problema y es por eso que el programa se está cerrando.

Esto no es específico de Python y es bastante común. Un código de salida distinto de cero se trata como una salida anormal y, a veces, el código de error indica cuál fue el problema. Un código de error cero significa una salida exitosa.

Esto es útil para otros programas, shell, llamadas, etc. para saber qué sucedió con su programa y proceder en consecuencia.

manojlds
fuente
10
¿Y qué hay de la salida (-1)?
Faizan 01 de
16
@Faizan: el código de salida es un valor de 8 bits en Unix. Si invoca exit(-1), el valor es equivalente a exit(255): los 8 bits menos significativos se transmiten al programa de llamada (shell o lo que sea).
Jonathan Leffler
44
Tenga en cuenta que según los documentos , exit()el sitemódulo lo agrega y no debe ser utilizado por los programas. En su lugar, use sys.exit(), o incluso raise SystemExit, si no desea importar otro módulo.
daviewales
2
Debido a los códigos de salida de Unix / Linux, estaba pensando que 0 es verdadero y 1 es valor falso en las condiciones de Python.
vlyalcin
19

Esto determina el estado de salida del programa cuando termina de ejecutarse (generalmente, 0 para el éxito y 1 para el error).

No es exclusivo de Python, y el efecto exacto depende de su sistema operativo y de cómo se llama al programa (aunque el 99% del tiempo, si solo está ejecutando scripts de Python, no importa).

David Robinson
fuente
12

La convención estándar para todos los programas en C, incluido Python, es para exit(0)indicar el éxito, y / exit(1)o cualquier otro valor distinto de cero (en el rango 1..255) para indicar el fracaso. Cualquier valor fuera del rango 0..255 se trata en el módulo 256 (el estado de salida se almacena en un valor de 8 bits). A veces, eso se tratará como firmado (por lo que es posible que vea -128, -127, etc.) pero, por lo general, se trata como no firmado.

Este estado está disponible para el código que invocó a Python. Esta convención se aplica en todas las plataformas, aunque el significado del estado de salida distinto de cero puede variar en diferentes plataformas.

Jonathan Leffler
fuente
7

El número que pasa a la exit()función es simplemente el código de retorno de su programa, que se le da al sistema operativo. Desde el punto de vista de su programa, no hay diferencia: la ejecución finalizará en ambos casos, y el valor suministrado a la función se le dará al sistema operativo. Pero algunas herramientas y scripts tienen en cuenta el código de salida del programa. La mayoría de las herramientas devuelven 0 cuando tienen éxito y no son cero para indicar un error.

Por lo tanto, si su programa se ejecutará desde un script, una herramienta automatizada o desde algún otro software que tenga en cuenta el código de retorno (como un IDE), debe tener cuidado con lo que devuelve.

En caso de duda, simplemente devuelva 0 para indicar que todo está bien.

José Ernesto Lara Rodríguez
fuente
6

exit(0): Esto hace que el programa salga con una finalización exitosa.

exit(1): Esto hace que el programa salga con un significado específico del sistema.

En muchos sistemas, exit(1)indica algún tipo de falla, sin embargo, no hay garantía.

Como recuerdo, el estándar C solo reconoce tres valores de salida estándar:

  • EXIT_SUCCESS - terminación exitosa
  • EXIT_FAILURE - terminación fallida
  • 0 -- igual que EXIT_SUCCESS
sailakshmi cheedella
fuente