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

18 投票
1 回答
3082 浏览
提问于 2025-04-15 21:47

在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 个回答

14

根据Python的文档,在2.5版本之前,处理这个问题的正确方法是:

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

这段话有点啰嗦,但至少提供了一个解决方案。

撰写回答