2010-04-19 31 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