Éviter la capture accidentelle KeyboardInterrupt et SystemExit en Python 2.4
-
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.)
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.