Éviter la capture accidentelle KeyboardInterrupt et SystemExit en Python 2.4

StackOverflow https://stackoverflow.com/questions/2669750

  •  28-09-2019
  •  | 
  •  

Question

Dans les scripts Python, il y a beaucoup de cas où une interruption de clavier (Ctrl-C) ne parvient pas à tuer le processus en raison d'une clause de quelque part except nue dans le code:

try:
    foo()
except:
    bar()

La solution étalon dans le python 2,5 ou plus est d'attraper Exception plutôt que d'utiliser des clauses de except nues:

try:
    foo()
except Exception:
    bar()

Cela fonctionne parce que, à partir de Python 2.5, KeyboardInterrupt et SystemExit Hériter de BaseException, non Exception. Cependant, certaines installations sont encore en cours d'exécution Python 2.4. Comment ce problème peut être traité dans les versions antérieures à Python 2.5?

(je vais répondre à cette question moi-même, mais le mettre ici afin que les gens recherchant peut trouver une solution.)

Était-ce utile?

La solution

Selon le documentation Python , la bonne façon de gérer cela dans les versions Python antérieures à 2.5 est:

try:
    foo()
except (KeyboardInterrupt, SystemExit):
    raise
except:
    bar()

C'est très verbeux, mais au moins il est une solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top