2010-04-19 30 views
17

抓住一个KeyboardInterrupt和SystemExit在Python脚本,有很多情况下,一个键盘中断(按Ctrl-C)不杀,因​​为一个裸except子句中的代码某处的过程:避免无意中在Python 2.4

try: 
    foo() 
except: 
    bar() 

标准溶液在Python 2.5或更高是捕捉Exception而不是使用裸except子句:

try: 
    foo() 
except Exception: 
    bar() 

此操作,因为,像Python 2.5,KeyboardInterrupt和的继承自BaseException,而不是Exception。但是,一些安装仍在运行Python 2.4。在Python 2.5之前的版本中如何处理这个问题?

(我要回答这个问题我自己,而是把它,让别人搜索可以找到一个解决方案。)

+0

不要问问题,以便你自己回答。 SO不是随机数据的维基,它是人们实际询问*的问题的答案。 – 2010-04-19 18:22:14

+3

@Glenn Maynard:猜猜你是错的:http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions – Curd 2010-04-19 18:25:35

+0

回答你自己的问题,如果你在问问题后询问答案没事。提出一个问题*,以便你可以回答*完全不同。 – 2010-04-19 20:13:40

回答

13

按照Python documentation,以正确的方式在Python版本早于处理这个问题2.5是:

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

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

+1

除了Exception:'外,你应该做第二个'except',以避免捕获不应该被捕获的其他异常。 – 2010-04-19 19:05:29