Alle Dokumente sagen uns,
Wird ausgelöst, wenn der Benutzer die Unterbrechungs-Taste drückt (normalerweise
Control-C
oderDelete
). Während der Ausführung wird regelmäßig nach Interrupts gesucht.
Aber ab dem Punkt des Codes, wann kann ich diese Ausnahme sehen? Tritt sie während der Anweisungsausführung auf? Nur zwischen Aussagen? Kann es in der Mitte eines Ausdrucks passieren?
Zum Beispiel:
%Vor% Wird dieser Code während einer gut geplanten KeyboardInterrupt
auslaufen? Oder wird es während der Ausführung einiger Anweisungen oder Ausdrücke ausgelöst?
Laut einer Anmerkung in der nicht verwandten PEP 343 :
Auch wenn Sie fehlerfreien Code schreiben, kann eine KeyboardInterrupt-Ausnahme immer noch dazu führen, dass sie zwischen zwei beliebigen Opcodes von virtuellen Maschinen beendet wird.
So kann es im Wesentlichen überall vorkommen. Es kann tatsächlich während der Auswertung eines einzelnen Ausdrucks auftreten. (Dies sollte nicht überraschend sein, da ein Ausdruck Funktionsaufrufe enthalten kann und innerhalb eines Funktionsaufrufs so ziemlich alles passieren kann.)
Ja, ein KeyboardInterrupt
kann an der von Ihnen markierten Stelle auftreten.
Um damit umzugehen, sollten Sie einen with
-Block verwenden:
Die Ausnahme könnte jedoch auch zwischen dem Aufruf open()
und der Zuordnung zu file_
auftreten. Es lohnt sich wahrscheinlich nicht, sich darüber Gedanken zu machen, da normalerweise ein ctrl-c bedeutet, dass Ihr Programm kurz vor dem Ende steht, damit das "geleckte" Datei-Handle vom Betriebssystem bereinigt wird. Aber wenn Sie wissen, dass es wichtig ist, können Sie einen Signalhandler verwenden, um das Signal abzufangen, das KeyboardInterrupt auslöst (SIGINT).
Tags und Links python exception-handling exception keyboardinterrupt