In Python gibt es zwei ähnlich benannte Funktionen exit()
und sys.exit()
. Was ist der Unterschied und wann sollte ich einen über den anderen verwenden?
exit
ist ein Helfer für die interaktive Shell - sys.exit
ist für die Verwendung in Programmen vorgesehen.
Das
site
Modul (das beim Start automatisch importiert wird, außer wenn die-S
Befehlszeilenoption angegeben ist) fügt dem integrierten Namespace mehrere Konstanten hinzu (zexit
. B. ) . Sie sind nützlich für die interaktive Interpreter-Shell und sollten nicht in Programmen verwendet werden .
Technisch machen sie meistens dasselbe: Erhöhen SystemExit
. sys.exit
tut dies in 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
ist in site.py bzw. _sitebuiltins.py definiert .
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')
Beachten Sie, dass es eine dritte Exit-Option gibt, nämlich os._exit , die beendet wird , ohne Bereinigungshandler aufzurufen , Standardpuffer zu leeren usw. (und die normalerweise erst nach a im untergeordneten Prozess verwendet werden sollte fork()
).
-S
es nicht verwendet wird. Eine Möglichkeit, damit es auch funktioniert,-S
ist die Angabefrom sys import *
.from module import *
.Wenn ich
exit()
einen Code verwende und ihn in der Shell ausführe, wird eine Meldung angezeigt, in der Sie gefragt werden, ob ich das Programm beenden möchte oder nicht. Es ist wirklich beunruhigend. Siehe hierIst
sys.exit()
aber in diesem Fall besser. Es schließt das Programm und erstellt kein Dialogfeld.quelle
sys.exit()
sollte er in Programmen verwendet werden.