Abfangen des KeyboardInterrupt-Fehlers in Python

Vaibhhav Khetarpal 10 Oktober 2023
  1. Verwenden Sie die try...except-Anweisung, um den KeyboardInterrupt-Fehler in Python abzufangen
  2. Verwenden Sie Signalhandler, um den KeyboardInterrupt-Fehler in Python abzufangen
Abfangen des KeyboardInterrupt-Fehlers in Python

Der KeyboardInterrupt-Fehler tritt auf, wenn ein Benutzer versucht, das laufende Programm manuell mit Ctrl + C oder Ctrl + Z. anzuhalten-Befehle oder durch Unterbrechen des Kernels im Fall von Jupyter Notebook. Um die häufig vorkommende unbeabsichtigte Verwendung von KeyboardInterrupt zu verhindern, können wir in Python die Ausnahmebehandlung verwenden.

In dieser Anleitung erfahren Sie, wie Sie den Fehler KeyboardInterrupt in Python abfangen.

Verwenden Sie die try...except-Anweisung, um den KeyboardInterrupt-Fehler in Python abzufangen

Die Anweisung try...except wird verwendet, wenn es um die Ausnahmebehandlung in Python geht. Die Anweisung try...except hat eine eindeutige Syntax; es ist in drei Blöcke unterteilt, die alle einen anderen Zweck und eine andere Funktion im Python-Code haben.

  • Der Block try enthält den Codecluster, der vom Interpreter auf Fehler überprüft werden muss.
  • Der Block except wird verwendet, um die benötigten Ausnahmen hinzuzufügen und die Fehler des Codes zu umgehen.
  • Der Block finally enthält die Anweisungen, die ohne Prüfung ausgeführt und von den Blöcken try und except ignoriert werden.

Um den Code für KeyboardInterrupt in Python zu erklären, nehmen wir ein einfaches Programm, das den Benutzer zur Eingabe auffordert, während es die KeyboardInterrupt-Ausnahme manuell behandelt.

Der folgende Code verwendet die try...except-Anweisung, um den KeyboardInterrupt-Fehler in Python abzufangen.

try:
    x = input()
    print("Try using KeyboardInterrupt")
except KeyboardInterrupt:
    print("KeyboardInterrupt exception is caught")
else:
    print("No exceptions are caught")

Das obige Programm liefert die folgende Ausgabe.

KeyboardInterrupt exception is caught

Im obigen Code befindet sich die Eingabefunktion zwischen dem try-Block und wird leer gelassen, da in diesem Fall keine weiteren Details benötigt werden. Dann behandelt der Block except den Fehler KeyboardInterrupt. Der KeyboardInterrupt-Fehler wird manuell ausgelöst, damit wir erkennen können, wann der KeyboardInterrupt-Prozess auftritt.

Python erlaubt die Definition beliebig vieler except-Blöcke in einem Codeblock.

Verwenden Sie Signalhandler, um den KeyboardInterrupt-Fehler in Python abzufangen

Das Modul signal wird verwendet, um Funktionen und Mechanismen bereitzustellen, die Signalhandler in Python verwenden. Wir können das Signal SIGINT abfangen, das im Grunde ein Interrupt von der Tastatur (Strg + C) ist. Das Auslösen des KeyboardInterrupt ist in diesem Fall die Standardaktion.

Das Modul sys in Python wird verwendet, um mehrere notwendige Variablen und Funktionen bereitzustellen, die verwendet werden, um verschiedene Teile der Python-Laufzeitumgebung zu manipulieren.

Die Module signal und sys müssen in den Python-Code importiert werden, um diese Methode erfolgreich und fehlerfrei verwenden zu können.

Der folgende Code verwendet Signalhandler, um den KeyboardInterrupt-Fehler in Python abzufangen.

import signal
import sys


def sigint_handler(signal, frame):
    print("KeyboardInterrupt is caught")
    sys.exit(0)


signal.signal(signal.SIGINT, sigint_handler)

Der obige Code liefert die folgende Ausgabe.

KeyboardInterrupt is caught

Im obigen Code wird die Funktion signal.signal() verwendet, um benutzerdefinierte Handler zu definieren, die ausgeführt werden sollen, wenn ein Signal eines bestimmten Typs empfangen wird.

Wir sollten beachten, dass ein Handler, der einmal für ein bestimmtes Signal festgelegt wurde, installiert bleibt, bis der Benutzer ihn manuell zurücksetzt. Einzige Ausnahme ist in diesem Fall der Handler für SIGCHLD.

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn