Abfangen von KeyboardInterrupt

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
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Also ich hab folgendes Problem:
Ich möchte z.B. bei einem Schleifendurchlauf, der mir zu lange dauert abbrechen. Jetzt bricht das ganze Programm ab und ich möchte ja das Ergebnis meiner bisherigen berechnungen sehen. Ich dachte da an sowas, um zu lösen:

Code: Alles auswählen

try:
    
    for i in range (10000000): # nur beispiel
        pass
except:
    
    print(i)
    raise KeyboardInterrupt



Ja das ist nicht sehr schön aber es funktioniert. Wäre es auch anders lösbar??

Edit: Sorry für die verhunzen einrückungen
Zuletzt geändert von Newcomer am Montag 11. Juli 2011, 14:38, insgesamt 1-mal geändert.
deets

Na, das mindeste waere ja eben auch nur den KeyboardInterrupt abzufangen, damit andere Exceptions die einen Fehler im Programm anzeigen auch vernuenftig behandelt werden.

Und dann waere es unter Umstaenden ueberlegenswert, ob du dein Programm nicht in Form von generatoren/greenlets oder aehnlichem implementierst. Das haette den Vorteil, dass du die Arbeit in viele kleine Schritte unterteilst, und dazwischen drin abbrechen kannst - aber kontrolliert, und nicht irgendwo mitten in einer Teilaufgabe, die vielleicht schon zur Haelfte fertig ist.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Newcomer hat geschrieben:Edit: Sorry für die verhunzen einrückungen
Dann beheb das doch.

Wenn du nur den `KeyboardInterrupt` abfangen willst, solltest du auch nur den abfangen. Bei einem `NameError` einen `KeyboardInterrupt` auszuloesen und alle Informationen wegzuwerfen ist reichlich unbrauchbar.
Statt dem expliziten `raise KeyboardInterrupt` kannst du auch ein `raise` nutzen um die eigentliche Exception weiterzugeben.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Ok danke
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Ja und wenn ich nicht jedesmal das ergebnis angezeigt haben möchte und dann erst das Endergebnis haben möchte, das vll. nur teilweise fertig ist??
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was ist das "Ergebnis" und was das "Endergebnis"?
Bitte nehm dir die Zeit deine Posts verstaendlich zu schreiben und lies sie vor dem Posten am besten nochmal durch.

Generell gilt, wenn du eine Berechnung per Exception abbrichst, kannst du sie nicht nur unterbrechen und fortsetzen. Das laesst Pythons Exception-Semantik nicht zu, in Common Lisp waere es mit Restarts moeglich.
Antworten