Wann wird KeyboardInterrupt in Python ausgelöst?

8

Alle Dokumente sagen uns,

  

Wird ausgelöst, wenn der Benutzer die Unterbrechungs-Taste drückt (normalerweise Control-C oder Delete ). 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?

    
Thanatos 23.02.2016, 07:36
quelle

2 Antworten

4

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.)

    
BrenBarn 23.02.2016 07:43
quelle
1

Ja, ein KeyboardInterrupt kann an der von Ihnen markierten Stelle auftreten.

Um damit umzugehen, sollten Sie einen with -Block verwenden:

%Vor%

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).

    
BingsF 23.02.2016 07:42
quelle