Es scheint, dass Python viele verschiedene Befehle unterstützt, um die Skriptausführung zu stoppen.
Die Entscheidungen , die ich gefunden habe , sind: quit()
, exit()
, sys.exit()
,os._exit()
Habe ich welche verpasst? Was ist der Unterschied zwischen ihnen? Wann würden Sie jeden verwenden?
os.abort()
Antworten:
Lassen Sie mich einige Informationen dazu geben:
quit()
löst einfach dieSystemExit
Ausnahme aus.Wenn Sie es ausdrucken, wird außerdem eine Meldung angezeigt:
Diese Funktionalität wurde hinzugefügt, um Personen zu helfen, die Python nicht kennen. Schließlich ist eines der wahrscheinlichsten Dinge, die ein Neuling versuchen wird, Python zu beenden, das Eingeben
quit
.Sollte
quit
jedoch nicht im Produktionscode verwendet werden. Dies liegt daran, dass es nur funktioniert, wenn dassite
Modul geladen ist. Stattdessen sollte diese Funktion nur im Interpreter verwendet werden.exit()
ist ein Alias fürquit
(oder umgekehrt). Sie existieren einfach zusammen, um Python benutzerfreundlicher zu machen.Außerdem gibt es beim Drucken eine Meldung:
Doch wie
quit
,exit
wird als schlecht in der Produktion Code zu verwenden und soll für die Verwendung im Interpreter reserviert werden. Dies liegt daran, dass es auch auf dassite
Modul angewiesen ist .sys.exit()
löst auch dieSystemExit
Ausnahme aus. Dies bedeutet , dass es die gleichen wie istquit
undexit
in dieser Hinsicht.Im Gegensatz zu diesen beiden wird es jedoch
sys.exit
als gut für die Verwendung im Produktionscode angesehen. Dies liegt daran, dass dassys
Modul immer da ist.os._exit()
beendet das Programm ohne Bereinigung Handler aufrufen, stdio Puffer Spülung, etc . Daher ist es keine Standardmethode zum Beenden und sollte nur in besonderen Fällen verwendet werden. Die häufigste davon sind die untergeordneten Prozesse, die von erstellt wurdenos.fork
.Beachten Sie, dass von den vier angegebenen Methoden nur diese in ihrer Funktionsweise einzigartig ist.
Zusammenfassend beenden alle vier Methoden das Programm. Die ersten beiden werden jedoch als schlecht für die Verwendung im Produktionscode angesehen, und die letzte ist eine nicht standardmäßige, schmutzige Methode, die nur in speziellen Szenarien verwendet wird. Wenn Sie ein Programm normal beenden möchten, wählen Sie die dritte Methode :
sys.exit
.Oder, meiner Meinung nach noch besser, Sie können einfach direkt das tun, was
sys.exit
hinter den Kulissen passiert, und rennen:Auf diese Weise müssen Sie nicht
sys
zuerst importieren .Diese Wahl hängt jedoch nur vom Stil ab und liegt ganz bei Ihnen.
quelle
quit
undexit
beenden Sie die Shell, währendsys.exit
dies nicht der Fall ist.sys.exit()
ist kein zuverlässiger Weg, um zu schließen. Wenn es innerhalb eines Threads aufgerufen wird, wird nur dieser Thread beendet, es sei denn, er befindet sich im Hauptthread. Dies kann zu vielen Fällen führen, in denen das Programm fortgesetzt wird, weil sich der Aufruf nicht im Hauptthread befand, insbesondere da einige Interpreter unsichtbar Thread-Aufrufe ausführen.end
Befehl hinzuzufügen, der dies tun würderaise SystemExit
. Verstehe nicht, warum es so etwas nicht einfach geben kann, wie in BASIC.print
von einer Anweisung in eine Funktion geändert wurde. Es ist einfach, Syntax hinzuzufügen, aber dies ist mit Komplexitätskosten verbunden.sys.exit()
?Die Funktionen *
quit()
,,exit()
undsys.exit()
funktionieren auf die gleiche Weise: Sie lösen dieSystemExit
Ausnahme aus. So gibt es keinen wirklichen Unterschied, außer dasssys.exit()
immer verfügbar ist , aberexit()
undquit()
stehen nur zur Verfügung , wenn dassite
Modul importiert wird.Die
os._exit()
Funktion ist etwas Besonderes. Sie wird sofort beendet, ohne dass Bereinigungsfunktionen aufgerufen werden (z. B. werden keine Puffer geleert). Dies ist für hochspezialisierte Anwendungsfälle konzipiert ... grundsätzlich nur beim Kind nach einemos.fork()
Anruf.Fazit
Verwenden Sie
exit()
oderquit()
in der REPL.Verwenden Sie
sys.exit()
in Skripten oderraise SystemExit()
wenn Sie es vorziehen.Verwenden Sie diese Option,
os._exit()
damit untergeordnete Prozesse nach einem Aufruf von beendet werdenos.fork()
.All dies kann ohne Argumente aufgerufen werden, oder Sie können den Exit-Status angeben, z. B.
exit(1)
oderraise SystemExit(1)
mit Status 1 beenden. Beachten Sie, dass tragbare Programme auf Exit-Statuscodes im Bereich von 0 bis 255 beschränkt sind, wenn Sie diesraise SystemExit(256)
auf vielen Systemen tun wird abgeschnitten und Ihr Prozess wird tatsächlich mit dem Status 0 beendet.Fußnoten
* Eigentlich
quit()
undexit()
sind aufrufbare Instanzobjekte, aber ich denke, es ist in Ordnung, sie Funktionen aufzurufen.quelle
Verschiedene Mittel zum Verlassen
os._exit()
::exit(0)
::exit(1)
::sys.exit()
::quit()
::Zusammenfassung
Grundsätzlich machen sie alle dasselbe, aber es hängt auch davon ab, wofür Sie es tun.
Ich glaube nicht, dass Sie etwas ausgelassen haben und ich würde empfehlen, sich an
quit()
oder zu gewöhnenexit()
.Sie würden verwenden
sys.exit()
undos._exit()
hauptsächlich, wenn Sie große Dateien verwenden oder Python zur Steuerung des Terminals verwenden.Ansonsten hauptsächlich
exit()
oder verwendenquit()
.quelle
sys.exit
ist der kanonische Weg zum Verlassen.Intern
sys.exit
erhöht nurSystemExit
. Das Anrufensys.exit
ist jedoch idiomatischer als dasSystemExit
direkte Erhöhen .os.exit
ist ein Systemaufruf auf niedriger Ebene, der direkt beendet wird, ohne Bereinigungshandler aufzurufen.quit
undexit
existieren nur, um einen einfachen Ausweg aus der Python-Eingabeaufforderung zu bieten. Dies ist für neue Benutzer oder Benutzer gedacht, die versehentlich die Python-Eingabeaufforderung eingegeben haben und nicht die richtige Syntax kennen möchten. Sie werden wahrscheinlich versuchen,exit
oderquit
. Dies beendet den Interpreter zwar nicht, gibt jedoch zumindest eine Nachricht aus, die ihm einen Ausweg aufzeigt:Dies ist im Wesentlichen nur ein Hack, der die Tatsache ausnutzt, dass der Interpreter den
__repr__
Ausdruck druckt, den Sie an der Eingabeaufforderung eingeben.quelle