Diferencia entre exit() y sys.exit() en Python

Resuelto Drake Guan asked hace 13 años • 3 respuestas

En Python, hay dos funciones con nombres similares exit()y sys.exit(). ¿Cuál es la diferencia y cuándo debo usar uno sobre el otro?

Drake Guan avatar Jun 28 '11 10:06 Drake Guan
Aceptado

exites un ayudante para el shell interactivo y sys.exitestá diseñado para su uso en programas.

El sitemódulo (que se importa automáticamente durante el inicio, excepto si -Sse proporciona la opción de línea de comandos) agrega varias constantes al espacio de nombres integrado (por ejemplo exit) . Son útiles para el intérprete interactivo y no deben usarse en programas .


Técnicamente, hacen prácticamente lo mismo: subir SystemExit. sys.exitlo hace en 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 exitse define en site.py y _sitebuiltins.py , respectivamente.

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 existe una tercera opción de salida, a saber os._exit , que sale sin llamar a los controladores de limpieza, vaciar los buffers stdio, etc. (y que normalmente solo debería usarse en el proceso hijo después de a fork()).

miku avatar Jun 28 '2011 03:06 miku

Si uso exit()un código y lo ejecuto en el shell, muestra un mensaje que me pregunta si quiero cerrar el programa o no. Es realmente inquietante. Mira aquí

Pero sys.exit()es mejor en este caso. Cierra el programa y no crea ningún cuadro de diálogo.

Ramisa Anjum Aditi avatar Jun 04 '2017 12:06 Ramisa Anjum Aditi