W Pythonie istnieją dwie podobnie nazwane funkcje exit()oraz sys.exit(). Jaka jest różnica i kiedy powinienem stosować jeden na drugim?
W Pythonie istnieją dwie podobnie nazwane funkcje exit()oraz sys.exit(). Jaka jest różnica i kiedy powinienem stosować jeden na drugim?
Odpowiedzi:
exitjest pomocnikiem dla interaktywnej powłoki - sys.exitjest przeznaczony do użytku w programach.
siteModuł (który jest importowany automatycznie podczas uruchamiania systemu, chyba że-Sopcja wiersza polecenia jest podana) dodaje kilka stałych do wbudowanej przestrzeni nazw (npexit) . Są one przydatne dla interaktywnej powłoki interpretera i nie powinny być używane w programach .
Technicznie robią głównie to samo: podbijanie SystemExit. sys.exitrobi to w 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;
}
Chociaż exitjest zdefiniowany odpowiednio w site.py i _sitebuiltins.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')
Zauważ, że istnieje trzecia opcja wyjścia, a mianowicie os._exit , która kończy działanie bez wywoływania procedur czyszczenia, opróżniania buforów stdio itp. (I która normalnie powinna być używana tylko w procesie potomnym po a fork()).
from module import *.
Jeśli użyję exit()kodu i uruchomię go w powłoce, wyświetli się komunikat z pytaniem, czy chcę zabić program, czy nie. To naprawdę niepokojące.
Spójrz tutaj
Ale sys.exit()w tym przypadku jest lepiej. Zamyka program i nie tworzy żadnego okna dialogowego.
sys.exit()powinno być używane w programach.
-Szostanie użyty. Sposobem na to, aby działał nawet z,-Sjest określeniefrom sys import *.