Attrapez l'erreur KeyboardInterrupt en Python

Vaibhhav Khetarpal 10 octobre 2023
  1. Utilisez l’instruction try...except pour détecter l’erreur KeyboardInterrupt en Python
  2. Utilisez des gestionnaires de signaux pour détecter l’erreur KeyboardInterrupt en Python
Attrapez l'erreur KeyboardInterrupt en Python

L’erreur KeyboardInterrupt se produit lorsqu’un utilisateur essaie manuellement d’arrêter le programme en cours d’exécution en utilisant Ctrl + C ou Ctrl + Z ou en interrompant le noyau dans le cas de Jupyter Notebook. Pour éviter l’utilisation involontaire de KeyboardInterrupt qui se produit souvent, nous pouvons utiliser la gestion des exceptions en Python.

Dans ce guide, vous apprendrez comment détecter l’erreur KeyboardInterrupt en Python.

Utilisez l’instruction try...except pour détecter l’erreur KeyboardInterrupt en Python

L’instruction try...except est utilisée lorsqu’il s’agit de gérer les exceptions en Python. L’instruction try...except a une syntaxe unique ; il est divisé en trois blocs, qui ont tous un objectif et une fonction différents dans le code Python.

  • Le bloc try contient le cluster de code qui doit être vérifié pour toute erreur par l’interpréteur.
  • Le bloc except est utilisé pour ajouter les exceptions nécessaires et contourner les erreurs du code.
  • Le bloc finally contient les instructions qui doivent être exécutées sans vérification et ignorées par les blocs try et except.

Pour expliquer le code de KeyboardInterrupt en Python, nous prenons un programme simple qui demande à l’utilisateur une entrée tout en gérant manuellement l’exception KeyboardInterrupt.

Le code suivant utilise l’instruction try...except pour détecter l’erreur KeyboardInterrupt en Python.

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

Le programme ci-dessus fournit la sortie suivante.

KeyboardInterrupt exception is caught

Dans le code ci-dessus, la fonction d’entrée réside entre le bloc try et est laissée vide car des détails supplémentaires ne sont pas nécessaires dans ce cas. Ensuite, le bloc except gère l’erreur KeyboardInterrupt. L’erreur KeyboardInterrupt est déclenchée manuellement afin que nous puissions identifier le moment où le processus KeyboardInterrupt se produit.

Python permet la définition d’autant de blocs except que l’utilisateur le souhaite dans un morceau de code.

Utilisez des gestionnaires de signaux pour détecter l’erreur KeyboardInterrupt en Python

Le module signal est utilisé pour fournir des fonctions et des mécanismes qui utilisent des gestionnaires de signaux en Python. Nous pouvons capter le signal SIGINT, qui est essentiellement une interruption du clavier Ctrl+C. L’augmentation de la KeyboardInterrupt est l’action par défaut lorsque cela se produit.

Le module sys de Python est utilisé pour fournir plusieurs variables et fonctions nécessaires utilisées pour manipuler des parties distinctes de l’environnement d’exécution Python.

Les modules signal et sys doivent être importés dans le code Python pour utiliser cette méthode avec succès et sans erreur.

Le code suivant utilise des gestionnaires de signaux pour détecter l’erreur KeyboardInterrupt en Python.

import signal
import sys


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


signal.signal(signal.SIGINT, sigint_handler)

Le code ci-dessus fournit la sortie suivante.

KeyboardInterrupt is caught

Dans le code ci-dessus, la fonction signal.signal() est utilisée pour définir des gestionnaires personnalisés à exécuter lorsqu’un signal d’un certain type est reçu.

Il convient de noter qu’un gestionnaire, une fois défini pour un signal particulier, reste installé jusqu’à ce que l’utilisateur le réinitialise manuellement. Dans ce cas, la seule exception est le gestionnaire de 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