Frage

Ich bin mir der die() Befehl in PHP, die früh ein Skript stoppt.

Wie kann ich dies in Python zu tun?

War es hilfreich?

Lösung

import sys
sys.exit()

Details aus der sys Modul Dokumentation :

  

sys.exit([arg])

     
    

Beenden von Python. Dies wird realisiert durch die Anhebung      SystemExit Ausnahme, so Bereinigungsaktionen durch abschließendes Klauseln angegeben     von try Aussagen geehrt werden, und es ist möglich, abzufangen, die     Ausfahrt Versuch einer äußeren Ebene.

         

Das optionale Argument arg kann eine ganze Zahl sein, den Exit-Status geben     (Verzug auf Null) oder eine andere Art von Objekt. Wenn es eine ganze Zahl ist,     Null wird als „erfolgreiche Beendigung“ betrachtet und jeder Nicht-Null-Wert ist     als „abnormal termination“ durch Muscheln und dergleichen. Die meisten Systeme     erfordern sie im Bereich von 0 bis 127, und erzeugt nicht definierte Ergebnisse zu sein     Andernfalls. Einige Systeme haben eine Konvention für die Zuweisung von spezifischen     Bedeutungen für bestimmte Beendigungscodes, aber diese sind im Allgemeinen     unterentwickelt; Unix-Programme im Allgemeinen 2 für die Befehlszeilensyntax     Fehler und 1 für alle anderen Arten von Fehlern. Wenn eine andere Art von Objekt     übergeben wird, ist keine äquivalente Null vorbei, und jedes andere Objekt ist,     bedruckenden stderr und ergibt ein Beendigungscode 1. insbesondere     sys.exit("some error message") ist ein schneller Weg, um ein Programm zu beenden, wenn     ein Fehler auftritt.

         

Da exit() letztlich „nur“ Raises eine Ausnahme, es wird nur Ausfahrt     der Prozess, wenn sie aus dem Haupt-Thread genannt, und die Ausnahme ist nicht     abgefangen.

  

Beachten Sie, dass dies die ‚nette‘ Art und Weise zu beenden. @ glyphtwistedmatrix unten weist darauf hin, dass, wenn Sie eine ‚harte Ausfahrt‘ möchten, können Sie verwenden os._exit ( Fehlercode ), obwohl es wahrscheinlich os spezifische zu einem gewissen Grad (es könnte nicht einen Fehlercode unter Windows zum Beispiel nehmen), und es ist auf jeden Fall weniger freundlich, da es nicht das nicht lassen Dolmetscher tun, um jede Bereinigung, bevor der Prozess stirbt.

Andere Tipps

Eine einfache Möglichkeit, einen Python-Skript zu beenden früh ist die integrierte Funktion zu verwenden beenden (). Es gibt keine Notwendigkeit, jede Bibliothek zu importieren, und es ist effizient und einfach.

Beispiel:

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

Eine andere Möglichkeit ist:

raise SystemExit

Während Sie in der Regel sys.exit vorziehen sollten, weil es mehr „freundlich“ ist zu anderem Code, alles es tatsächlich tut, ist eine Ausnahme ausgelöst.

Wenn Sie sicher sind, dass Sie sofort einen Prozess beenden müssen, und Sie können innerhalb von einigen Exception-Handler sein, die SystemExit fangen würde, gibt es eine andere Funktion - os._exit - die sofort auf der C-Ebene beendet und führt keine von die normale tear-down des Dolmetschers; sind beispielsweise Haken mit dem „atexit“ Modul registriert nicht ausgeführt.

Sie können auch einfach exit() verwenden.

Beachten Sie, dass sys.exit(), exit(), quit() und os._exit(0) töten , um das Python-Interpreter. Deshalb, wenn es in einem Skript von einem anderen Skript von execfile() genannt wird, stoppt er die Ausführung beiden Skripte.

Siehe " Stoppen der Ausführung eines Skripts aufgerufen, mit execfile ", dies zu vermeiden.

from sys import exit
exit()

Als Parameter können Sie einen Exit-Code übergeben, die OS zurückgegeben werden. Der Standardwert ist 0.

Ich habe gerade herausgefunden, dass, wenn eine multithreadded App, raise SystemExit Schreiben und sys.exit() beide nur den laufenden Faden tötet. Auf der anderen Seite verlässt os._exit() den gesamten Prozess. Dies wurde hier diskutiert .

Das Beispiel hat unter 2 Threads. Kenny und Cartman. Cartman soll für immer leben, aber Kenny wird rekursiv aufgerufen und sollte nach 3 Sekunden sterben. (Rekursive Berufung ist nicht der beste Weg, aber ich hatte andere Gründe)

Wenn wir auch Cartman sterben wollen, wenn Kenny stirbt, Kenny sollte mit os._exit weggehen, sonst, nur wird Kenny sterben und Cartman wird ewig leben.

import threading
import time
import sys
import os

def kenny(num=0):
    if num > 3:
        # print("Kenny dies now...")
        # raise SystemExit #Kenny will die, but Cartman will live forever
        # sys.exit(1) #Same as above

        print("Kenny dies and also kills Cartman!")
        os._exit(1)
    while True:
        print("Kenny lives: {0}".format(num))
        time.sleep(1)
        num += 1
        kenny(num)

def cartman():
    i = 0
    while True:
        print("Cartman lives: {0}".format(i))
        i += 1
        time.sleep(1)

if __name__ == '__main__':
    daemon_kenny = threading.Thread(name='kenny', target=kenny)
    daemon_cartman = threading.Thread(name='cartman', target=cartman)
    daemon_kenny.setDaemon(True)
    daemon_cartman.setDaemon(True)

    daemon_kenny.start()
    daemon_cartman.start()
    daemon_kenny.join()
    daemon_cartman.join()

Ich bin ein totaler Anfänger, aber sicher das ist saubere und kontrollierte

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 (jüngste Aufforderung zuletzt): Die Datei "Z: \ Directory \ testdieprogram.py", Zeile 12, in         (Haupt) Datei "Z: \ Verzeichnis \ testdieprogram.py", Zeile 8, in dem Haupt         sys.exit () Systemexit

  

Bearbeiten

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

In Python 3.5, habe ich versucht, ohne Verwendung von Modulen ähnlichen Code zu integrieren (z sys, Biopy) andere als das, was built-in ist das Skript zu stoppen und eine Fehlermeldung an meine Benutzer drucken. Hier ist mein Beispiel:

## My example:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    print("Start codon is missing! Check your DNA sequence!");
    exit(); ## as most folks said above

Später fand ich es prägnanter ist, nur einen Fehler aus:

## My example revised:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    raise ValueError("Start codon is missing! Check your DNA sequence!");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top