No Python, existem duas funções com nomes semelhantes exit()e sys.exit(). Qual é a diferença e quando devo usar um sobre o outro?
No Python, existem duas funções com nomes semelhantes exit()e sys.exit(). Qual é a diferença e quando devo usar um sobre o outro?
Respostas:
exité um auxiliar do shell interativo - sys.exité destinado ao uso em programas.
O
sitemódulo (que é importado automaticamente durante a inicialização, exceto se a-Sopção da linha de comandos for fornecida) adiciona várias constantes ao espaço para nome interno (por exemploexit) . Eles são úteis para o shell do interpretador interativo e não devem ser usados em programas .
Tecnicamente, eles fazem basicamente o mesmo: aumentar SystemExit. sys.exitfaz isso no 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;
}
While exité definido em site.py e _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')
Observe que existe uma terceira opção de saída, os._exit , que sai sem chamar manipuladores de limpeza, liberar buffers stdio, etc. (e que normalmente deve ser usado apenas no processo filho após a fork()).
from module import *.
Se eu usar exit()um código e executá-lo no shell, ele mostrará uma mensagem perguntando se eu quero matar o programa ou não. É realmente perturbador.
Veja aqui
Mas sys.exit()é melhor neste caso. Ele fecha o programa e não cria nenhuma caixa de diálogo.
sys.exit()deve ser usado dentro de programas.
-Sseja usado. Uma maneira de fazê-lo funcionar mesmo com-Sé especificarfrom sys import *.