Ich bin mir bewusst, dass die die()
Befehl in PHP, mit dem ein Skript vorzeitig beendet wird.
Wie kann ich dies in Python tun?
Ich bin mir bewusst, dass die die()
Befehl in PHP, mit dem ein Skript vorzeitig beendet wird.
Wie kann ich dies in Python tun?
import sys
sys.exit()
Details aus dem sys
Modul-Dokumentation :
sys.**exit**([_arg_])
Beenden von Python. Dies wird implementiert, indem die
SystemExit
Ausnahme, so dass durch finally-Klauseln festgelegte Bereinigungsaktionen vontry
Anweisungen werden beachtet, und es ist möglich, die Ausstiegsversuch auf einer äußeren Ebene abzufangen.Das optionale Argument arg kann eine ganze Zahl sein, die den Exit-Status angibt angibt (Standardwert ist Null), oder ein anderer Objekttyp. Wenn es eine ganze Zahl ist, Null als "erfolgreiche Beendigung" und jeder Wert ungleich Null als von Shells und dergleichen als "abnormaler Abbruch" betrachtet. Die meisten Systeme erfordern, dass der Wert im Bereich 0-127 liegt, und erzeugen andernfalls undefinierte Ergebnisse andernfalls. Einige Systeme haben eine Konvention für die Zuweisung spezifischer Bedeutung für bestimmte Exit-Codes, aber diese sind im Allgemeinen unterentwickelt; Unix-Programme verwenden im Allgemeinen 2 für Syntaxfehler in der Befehlszeile Fehler und 1 für alle anderen Arten von Fehlern. Wenn ein anderer Typ von Objekt übergeben wird, ist None gleichbedeutend mit der Übergabe von Null, und jedes andere Objekt wird gedruckt nach
stderr
und führt zu einem Exit-Code von 1. Im Einzelnen,sys.exit("some error message")
ist eine schnelle Möglichkeit, ein Programm zu beenden, wenn ein Fehler auftritt.Desde
exit()
letztlich "nur" eine Ausnahme auslöst, wird es nur beendet den Prozess, wenn er vom Haupt-Thread aus aufgerufen wird, und die Ausnahme wird nicht abgefangen.
Beachten Sie, dass dies die "nette" Art des Ausstiegs ist. @ glyphtwistedmatrix unten weist darauf hin, dass Sie, wenn Sie einen "harten Ausstieg" wünschen, Folgendes verwenden können os._exit(*errorcode*)
obwohl es wahrscheinlich bis zu einem gewissen Grad os-spezifisch ist (es könnte zum Beispiel keinen Fehlercode unter Windows annehmen), und es ist definitiv weniger freundlich, da es den Interpreter keine Aufräumarbeiten durchführen lässt, bevor der Prozess stirbt. Andererseits ist es tut den gesamten Prozess, einschließlich aller laufenden Threads, beenden, während sys.exit()
(wie es in der Dokumentation heißt) wird nur beendet, wenn es vom Hauptthread aufgerufen wird und keine anderen Threads laufen.
Vermutlich sys.exit()
funktioniert nicht (beendet nicht den Prozess, sondern nur den Thread), wenn es von einem Hintergrund-Thread ausgelöst wird?
Gibt es eine Möglichkeit, ein Skript zu beenden, ohne eine Ausnahme auszulösen? Ich übergebe bereits relevante Flags aus dem Skript mit print to stdout piping in Popen, so dass die Ausnahme in diesem Fall mehr Probleme verursacht als sie löst.
Auch sys.exit() beendet alle Python-Skripte, aber quit() beendet nur das Skript, das es ausgelöst hat.
Weiß jemand, ob dadurch der gesamte Interpreter beendet wird oder nur das Skript nicht mehr ausgeführt wird? Speziell für ein Skript, das in Spyder läuft, bleibt der Python-Interpreter interaktiv, oder wird er beendet? Versuchen Sie, das Skript einfach nur anzuhalten, aber die Interaktivität des Interpreters beizubehalten.
@Alessa: es sieht eleganter aus, aber es ist nicht empfehlenswert: Sie lösen direkt eine eingebaute Ausnahme aus, anstatt die vorzuziehende (und überschreibbare) sys.exit
Umschlag
Sie können auch einfach exit()
.
Bitte beachten Sie, dass sys.exit()
, exit()
, quit()
y os._exit(0)
töten den Python-Interpreter. Wenn es also in einem Skript erscheint, das von einem anderen Skript durch execfile()
wird die Ausführung beider Skripte gestoppt.
Siehe " Ausführung eines mit execfile aufgerufenen Skripts stoppen ", um dies zu vermeiden.
Für mich war os._exit(0) der eleganteste Weg. Alle anderen führten zu unerwünschten Fehlern
Bitte verwenden Sie nicht quit()
ou exit()
in Ihrem Code. Diese Funktionen sind nur für das interaktive Python gedacht. Siehe Python-Exit-Befehle - warum so viele und wann sollten sie verwendet werden?
Im Allgemeinen sollten Sie jedoch Folgendes bevorzugen sys.exit
weil es "freundlicher" zu anderem Code ist, ist alles, was es tatsächlich tut, eine Ausnahme auszulösen.
Wenn Sie sicher sind, dass Sie einen Prozess sofort beenden müssen, und Sie könnten sich innerhalb eines Exception-Handlers befinden, der die SystemExit
gibt es eine weitere Funktion - os._exit
- der sofort auf der C-Ebene beendet wird und keine der normalen Abbauprozesse des Interpreters durchführt; zum Beispiel werden die im Modul "atexit" registrierten Hooks nicht ausgeführt.
Verwendet in AWS Glue Job, os._exit()
ist die einzige Möglichkeit, den Auftrag ordnungsgemäß und ohne Fehler zu beenden.
@Jérémy aber ist es eine anmutige Shutdown? wissen Sie, wenn Sie Dinge nach diesem hängen haben kann? Neu in Python, also ignorieren Sie meinen Mangel an Wissen
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
4 Stimmen
Verwenden Sie einfach
import os
os._exit()
0 Stimmen
Xonsh: xon.sh/tutorial.html#das-alles-volk