避免在Python 2.4中意外捕获KeyboardInterrupt和SystemExit

时间:2010-04-19 18:09:09

标签: python python-2.4

在Python脚本中,有很多情况下键盘中断(Ctrl-C)无法终止进程,因为代码中的某处只有一个except子句:

try:
    foo()
except:
    bar()

Python 2.5或更高版本中的标准解决方案是捕获Exception而不是使用裸except子句:

try:
    foo()
except Exception:
    bar()

这是有效的,因为从Python 2.5开始,KeyboardInterruptSystemExit继承自BaseException,而不是Exception。但是,一些安装仍在运行Python 2.4。如何在Python 2.5之前的版本中处理此问题?

(我将自己回答这个问题,但是把它放在这里,以便搜索它的人可以找到解决方案。)

1 个答案:

答案 0 :(得分:13)

根据Python documentation,在2.5之前的Python版本中处理此问题的正确方法是:

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

这非常罗嗦,但至少它是一个解决方案。