En Python, hay dos funciones con nombres similares, exit()
y sys.exit()
. ¿Cuál es la diferencia y cuándo debo usar una sobre la otra?Diferencia entre exit() y sys.exit() en Python
Respuesta
exit
es un ayudante para el shell interactivo - sys.exit
está destinado para su uso en programas.
El módulo
site
(que se importa de forma automática durante el inicio, excepto si se le da la opción de línea de comandos-S
) añade varias constantes en el espacio de nombres incorporados (por ejemploexit
). Son útiles para el intérprete interactivo y no deben usarse en los programas.
Técnicamente, lo hacen sobre todo el mismo: elevar SystemExit
. sys.exit
lo hace de sysmodule.c:
static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
PyObject *exit_code = 0;
if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
return NULL;
/* Raise SystemExit so callers may catch it or clean up. */
PyErr_SetObject(PyExc_SystemExit, exit_code);
return NULL;
}
Mientras exit
se define en site.py:
class Quitter(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Use %s() or %s to exit' % (self.name, eof)
def __call__(self, code=None):
# Shells like IDLE catch the SystemExit, but listen when their
# stdin wrapper is closed.
try:
sys.stdin.close()
except:
pass
raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')
Tenga en cuenta que hay una tercera opción de salida, es decir os._exit, que sale sin llamar a los manipuladores de limpieza, lavado búfers de stdio, etc. (y que normalmente solo deberían usarse en el proceso secundario después de fork()
).
Si uso exit()
en un código y lo ejecuto en el shell, muestra un mensaje preguntándome si quiero matar el programa o no. Es realmente perturbador. See here
Pero sys.exit()
es mejor en este caso. Cierra el programa y no crea ningún cuadro de diálogo.
- 1. Diferencia entre llamar a sys.exit() y lanzar excepción
- 2. Diferencia entre java 'assert' y 'if() {} else exit;'
- 3. ¿Cuál es la diferencia entre exit() y abort()?
- 4. Diferencia entre '' y "" en Python
- 5. ¿Cuál es la diferencia entre sys.exit (0) y os._exit (0)
- 6. Python: diferencia entre `is` y` == `?
- 7. Diferencia en python entre basestring y types.StringType?
- 8. Diferencia entre dict.clear() y asignar {} en Python
- 9. ¿Cómo moverse por "sys.exit()" en python nosetest?
- 10. Diferencia entre Memcache y Python diccionario
- 11. ¿Hay alguna diferencia entre CPython y Python
- 12. Python: La diferencia entre usar "y "
- 13. Python: ¿diferencia entre os.access y os.path.exists?
- 14. Diferencia entre Python urllib.urlretrieve() y wget
- 15. Cuál es la diferencia entre echo ('exit'); morir; y morir ('salir');?
- 16. ¿Cuál es la diferencia entre sys y os.sys
- 17. ¿Cuál es la diferencia entre python activo y python?
- 18. diferencia entre eficiencia y dict.has_key clave en dict en Python
- 19. Diferencia entre rendimiento en Python y rendimiento en C#
- 20. Python: ¿Cuál es la diferencia entre __builtin__ y __builtins__?
- 21. exit(); morir(); falso retorno;
- 22. código python 2: si python 3 luego sys.exit()
- 23. Diferencia entre PyMODINIT_FUNC y PyModule_Create
- 24. Diferencia en SHA512 entre python hashlib y la herramienta sha512sum
- 25. Diferencia entre clase foo y clase foo (objeto) en Python
- 26. Diferencia entre dir (...) y vars (...) .keys() en Python?
- 27. ¿Cuál es la diferencia entre listas y tuplas en Python?
- 28. ¿Cuál es la diferencia entre conjuntos y listas en Python?
- 29. ¿Cuál es la diferencia entre list y list [:] en python?
- 30. ¿Cuál es la diferencia entre {} y [] en python?
Sospecho que la salida (main()) es una expresión común porque las personas no se dan cuenta * no se debe utilizar en programas * nota. Funciona bien a menos que se use ['-S'] (http://docs.python.org/using/cmdline.html#cmdoption-S). Una forma de hacerlo funcionar incluso con '-S' es especificar' from sys import * '. – nobar
@nobar, cierto, pero en realidad no desea usar 'from module import *'. – miku
Entonces, ¿cómo se genera 'SystemExit' en otros hilos? ¿Lo es, incluso? –