避免在Python 2.4中意外捕获KeyboardInterrupt和SystemExit
在Python脚本中,有很多情况下,当你按下键盘上的中断键(Ctrl-C)时,程序并不会停止运行,这通常是因为代码中有一个简单的 except
语句。
try:
foo()
except:
bar()
在Python 2.5或更高版本中,标准的解决办法是捕获 Exception
,而不是使用简单的 except
语句:
try:
foo()
except Exception:
bar()
这样做是有效的,因为从Python 2.5开始,KeyboardInterrupt
和 SystemExit
是从 BaseException
这个类继承来的,而不是从 Exception
继承的。不过,有些用户仍然在使用Python 2.4。那么在Python 2.5之前的版本中,应该如何处理这个问题呢?
(我会自己回答这个问题,但把它放在这里是为了让搜索这个问题的人能找到解决办法。)
1 个回答
14
根据Python的文档,在2.5版本之前,处理这个问题的正确方法是:
try:
foo()
except (KeyboardInterrupt, SystemExit):
raise
except:
bar()
这段话有点啰嗦,但至少提供了一个解决方案。