Frage Beenden eines Python-Skripts


Ich bin mir der bewusst die() Befehl in PHP, der ein Skript vorzeitig stoppt.

Wie kann ich das in Python machen?


751
2017-09-16 15:35


Ursprung


Antworten:


import sys
sys.exit()

Details aus der sys Moduldokumentation:

sys.Ausfahrt([arg])

Verlasse Python. Dies wird implementiert, indem die      SystemExit Ausnahme, also Bereinigungsaktionen, die von finally-Klauseln angegeben werden     von try Aussagen werden geehrt, und es ist möglich, die     Exit-Versuch auf einer äußeren Ebene.

Das optionale Argument arg kann eine Ganzzahl sein, die den Exit-Status angibt     (Standardwert ist null) oder ein anderer Objekttyp. Wenn es eine ganze Zahl ist,     Null wird als "erfolgreiche Beendigung" betrachtet und jeder Nicht-Null-Wert ist     als "abnormale Beendigung" durch Schalen und dergleichen betrachtet. Die meisten Systeme     es muss im Bereich 0-127 liegen und nicht definierte Ergebnisse liefern     Andernfalls. Einige Systeme haben eine Konvention zum Zuweisen von bestimmten     Bedeutungen für bestimmte Ausgangscodes, aber diese sind im Allgemeinen     unterentwickelt; Unix-Programme verwenden im Allgemeinen 2 für die Befehlszeilensyntax     Fehler und 1 für alle anderen Arten von Fehlern. Wenn ein anderer Objekttyp     Wird übergeben, ist None gleichbedeutend mit Null, und jedes andere Objekt ist     gedruckt auf stderr und führt zu einem Exit-Code von 1. Insbesondere      sys.exit("some error message") ist ein schneller Weg, um ein Programm zu beenden, wenn     Ein Fehler tritt auf.

Schon seit exit() letztlich "nur" eine Ausnahme, es wird nur verlassen     der Prozess beim Aufruf aus dem Hauptthread und die Ausnahme nicht     abgefangen.

Beachten Sie, dass dies der "nette" Weg zum Beenden ist. @glyph twistedmatrix unten zeigt an, dass Sie, wenn Sie einen 'harten Ausgang' wollen, os._exit (Fehlercode), obwohl es bis zu einem gewissen Grad os-spezifisch ist (es kann beispielsweise unter Windows keinen Fehlercode geben), und es ist definitiv weniger freundlich, da es den Interpreter keine Bereinigung vor dem Prozess machen lässt.


1031
2017-09-16 15:36



Eine einfache Möglichkeit, ein Python-Skript vorzeitig zu beenden, ist die integrierte Funktion quit (). Es ist nicht notwendig, eine Bibliothek zu importieren, und es ist effizient und einfach.

Beispiel:

#do stuff
if this == that:
  quit()

219
2018-02-12 15:50



Ein anderer Weg ist:

raise SystemExit

102
2017-09-16 15:37



Während du es generell vorziehen solltest sys.exit weil es zu anderen Code "freundlicher" ist, bewirkt es eigentlich nur eine Ausnahme.

Wenn Sie sicher sind, dass Sie einen Prozess sofort beenden müssen, befinden Sie sich möglicherweise in einem Ausnahmebehandler, der das Problem beheben würde SystemExitgibt es eine andere Funktion - os._exit - die sofort auf C-Level endet und keinen normalen Abbruch des Interpreters bewirkt; Zum Beispiel werden mit dem Modul "atexit" registrierte Hooks nicht ausgeführt.


59
2017-09-16 20:08



Sie können auch einfach verwenden exit().

Denk daran, dass sys.exit(), exit(), quit(), und os._exit(0)  töten der Python-Interpreter. Daher, wenn es in einem Skript erscheint, das von einem anderen Skript aus aufgerufen wird execfile(), stoppt es die Ausführung beider Skripte.

Sehen "Stoppen Sie die Ausführung eines mit execfile aufgerufenen Skripts" um es zu umgehen.


47
2018-04-22 14:57



from sys import exit
exit()

Als Parameter können Sie einen Exit-Code übergeben, der an OS zurückgegeben wird. Standard ist 0.


25
2017-09-16 15:38



Ich bin ein absoluter Neuling, aber das ist sicherlich sauberer und kontrollierter

def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        return
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Programm beendet

als

import sys
def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        sys.exit()
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Programm beendet Traceback (letzter Aufruf zuletzt): Datei "Z: \ Directory \ testdieprogram.py", Zeile 12, in         main () Datei "Z: \ Directory \ testdieprogram.py", Zeile 8, in main         sys.exit () SystemExit

Bearbeiten

Der Punkt ist, dass das Programm reibungslos und friedlich endet, anstatt "Ich habe aufgehört !!!!"


16
2018-03-19 11:13