Seite 1 von 1
Programm abbrechen ohne das Fenster zu schließen
Verfasst: Montag 7. März 2022, 09:00
von Ollom
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
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...
Re: Programm abbrechen ohne das Fenster zu schließen
Verfasst: Montag 7. März 2022, 09:12
von Sirius3
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.
Re: Programm abbrechen ohne das Fenster zu schließen
Verfasst: Montag 7. März 2022, 16:34
von qdox
Code: Alles auswählen
print("Fehlermeldung")
input("'Enter' drücken")
sys.exit()
Re: Programm abbrechen ohne das Fenster zu schließen
Verfasst: Dienstag 8. März 2022, 12:53
von __blackjack__
@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.
Re: Programm abbrechen ohne das Fenster zu schließen
Verfasst: Mittwoch 9. März 2022, 07:37
von Ollom
@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.
Re: Programm abbrechen ohne das Fenster zu schließen
Verfasst: Mittwoch 9. März 2022, 08:29
von Sirius3
@Ollom: das ist so lange eine "Lösung" bis das Programm wegen irgendeiner Exception abbricht und erst gar nicht bis zum `input` kommt.
Re: Programm abbrechen ohne das Fenster zu schließen
Verfasst: Donnerstag 10. März 2022, 14:26
von Codroid
@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)