Programm abbrechen ohne das Fenster zu schließen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

Hallo,

ich möchte gern bei falschen Eingaben mein Programm abbrechen. Allerdings soll der Benutzer noch einen Text mit dem Abbruchgrund sehen.

Versucht habe ich es mit

Code: Alles auswählen

sys.exit("Hier steht dann die Fehlermeldung.")  
Wenn ich das in der Python IDLE Shell ausführe ist alles super, da die Comandozeilenausgaben erhalten bleiben. Wenn ich aber die Python Datei ganz normal in Windows ausführe wird mir am Ende die Console geschlossen und keiner sieht die Fehlermeldung. Gibt es so etwas wie sys.stop anstelle von sys.exit, welches nur das Programm anhält aber nicht die Windowsconsole schließt?

Vielen Dank schon mal...
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Konsolenprogramme, werden, wie der Name schon sagt, aus der Konsole heraus gestartet. Also 1. Windows-Eingabeaufforderung öffnen, 2. Python-Programm starten. Dann bleibt auch aller Text sichtbar.
Benutzeravatar
qdox
User
Beiträge: 12
Registriert: Sonntag 6. März 2016, 12:14

Code: Alles auswählen

print("Fehlermeldung")
input("'Enter' drücken")
sys.exit()
Benutzeravatar
__blackjack__
User
Beiträge: 13942
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@qdox: Das `sys.exit()` ist hier sinnlos und überflüssig und für das ebenfalls sinnfreie `input()` wird Dich jeder Benutzer hassen der das Programm in einer Konsole ausführt, wie das ja eigentlich bei Konsolenprogrammen gedacht ist, und noch mehr, wenn man versucht das Programm aus einem anderen Programm heraus auszuführen, und sich dann am Ende mit diesem Mist herumschlagen zu müssen, weil das nicht einfach normal endet, sondern unbedingt noch mit einer sinnlosen Eingabe gefüttert werden will.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Ollom
User
Beiträge: 10
Registriert: Montag 6. Mai 2019, 12:50

@qdox: Danke, das ist eine super Idee, so etwas habe ich gesucht.
@_blackjack_: Es ist immer eine Frage für was das Tool genutzt wird. Im meinem Fall ist es ein Hilfsskript in Windows, welches ich nicht extra über die Console ausführen möchte. Allerdings muss man vorher Pfade in einer Config Datei einfügen. Wenn diese nicht passen hätte ich schon gern, dass der Benutzer weiß warum es nicht funktioniert. Daher ist das eine Top Lösung für mich.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ollom: das ist so lange eine "Lösung" bis das Programm wegen irgendeiner Exception abbricht und erst gar nicht bis zum `input` kommt.
Benutzeravatar
Codroid
User
Beiträge: 5
Registriert: Donnerstag 10. März 2022, 12:30
Kontaktdaten:

@Ollom:

Prinzipiell könntest du die Eingaben einfach über If-Bedingungen überprüfen. Wenn du möchtest, dass bestimmte Eingaben wie ein klassischer Fehlerfall behandelt werden, kannst du auch selbst eine Exception werfen und diese gegebenenfalls auch Abfangen.

Zunächst ein Beispiel, in dem das Programm mit einer Fehlermeldung abbricht:

Code: Alles auswählen

# Eine Beispiel-Funktion die einen Fehler bei einer bestimmten Eingabe werfen soll:
def hier_soll_nichts_schief_gehen(value):
        if value == "Ungültig":
                raise ValueError("Ungültig darf nicht verwendet werden!")
        else:
                print("Alles hat funktioniert!")

#Bei Ungültig soll nun die Nachricht der Fehlermeldung angezeigt werden
var = "Ungültig"

hier_soll_nichts_schief_gehen(var)
Als Output erhältst du hier einen Traceback und als Wert des ValueErrors wird deine Wunschnachricht ausgegeben. Alternativ kannst du mit einem Try-Block den Fehler auch abfangen und die Laufzeit kontrolliert beenden lassen. Dann wird deine Meldung ebenfalls ausgegeben, aber der Traceback bleibt aus:

Code: Alles auswählen

var = "Ungültig"

try:
        hier_soll_nichts_schief_gehen(var)
except ValueError as error:
        print(error)
Codroid ist eine Programmierschule in der das praktische Programmieren mit Python unterrichtet wird. Falls du Interesse hast, dann schreibe gerne eine PN oder email.
Antworten