Evitar la captura accidental de KeyboardInterrupt y SystemExit en Python 2.4
python-2.4 (1)
De acuerdo con la documentación de Python , la forma correcta de manejar esto en versiones de Python anteriores a la 2.5 es:
try:
foo()
except (KeyboardInterrupt, SystemExit):
raise
except:
bar()
Eso es muy prolijo, pero al menos es una solución.
En los scripts de Python, hay muchos casos en los que una interrupción del teclado (Ctrl-C) no puede detener el proceso debido a una cláusula de except
en algún lugar del código:
try:
foo()
except:
bar()
La solución estándar en Python 2.5 o superior es detectar Exception
lugar de usar cláusulas de except
:
try:
foo()
except Exception:
bar()
Esto funciona porque, a partir de Python 2.5, KeyboardInterrupt
y SystemExit
heredan de BaseException
, no Exception
. Sin embargo, algunas instalaciones todavía están ejecutando Python 2.4. ¿Cómo puede manejarse este problema en versiones anteriores a Python 2.5?
(Voy a responder esta pregunta por mí mismo, pero ponlo aquí para que las personas que lo encuentren puedan encontrar una solución).