Frage

Für die "q" (quit) Option in meinem Programm-Menü, habe ich den folgenden Code:

elif choice == "q":
    print()

Das ist alles in Ordnung war, bis ich es in einer Endlos-Schleife setzen, die Leerzeilen Druck gehalten. Gibt es eine Methode, die das Programm beenden kann? Else, können denken Sie an eine andere Lösung?

War es hilfreich?

Lösung

Eine Möglichkeit ist zu tun:

sys.exit(0)

Sie werden auf import sys natürlich haben.

Eine andere Möglichkeit ist Ihrer Endlosschleife break aus. Zum Beispiel könnten Sie dies tun:

while True:
    choice = get_input()
    if choice == "a":
        # do something
    elif choice == "q":
        break

Eine weitere Möglichkeit ist die Hauptschleife in Funktion zu setzen, und die Verwendung return:

def run():
    while True:
        choice = get_input()
        if choice == "a":
            # do something
        elif choice == "q":
            return

if __name__ == "__main__":
    run()

Der einzige Grund, warum Sie die run() Funktion benötigen, wenn return ist, dass (im Gegensatz zu einigen anderen Sprachen) Sie können nicht direkt return vom Hauptteil Ihres Python-Code (der Teil, der nicht in einer Funktion ist).

Andere Tipps

Der eigentliche Weg, um ein Programm zu beenden, zu nennen, ist

raise SystemExit

Es ist, was sys.exit tut, sowieso .

Ein einfacher SystemExit oder mit None als ein einziges Argument, setzt der Prozess Exit-Code auf Null. Jedes nicht-ganzzahlige Ausnahmewert (raise SystemExit("some message")) druckt den Ausnahmewert zu sys.stderr und setzt den Beendigungscode auf 1. Ein ganzzahliger Wert setzt den Prozess Exit-Code auf den Wert:

$ python -c "raise SystemExit(4)"; echo $?
4

In Python 3 gibt es eine exit() Funktion:

elif choice == "q":
    exit()

Siehe sys.exit . Diese Funktion wird Ihr Programm mit dem angegebenen Exit-Status beenden.

Bitte beachten Sie, dass die Lösungen auf Basis sys.exit () oder eine Ausnahme kann nicht arbeiten in einer Multi-Threaded-Umgebung.

  

Da exit () schließlich „nur“ eine Ausnahme auslöst, wird es nur um den Prozess beenden, wenn sie aus dem Haupt-Thread genannt, und die Ausnahme abgefangen wird nicht. ( doc )

Diese Antwort von Alex Martelli für weitere Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top