2011-07-18 30 views

回答

7

有可能是出乎意料的原因,在這裏可能會引發一個你不知道或不知道的異常。你寫你的程序,好像這裏唯一的例外可能是urllib2.URLError,然後有一天的內部產生一個不屬於這個的異常。這可能是一個錯誤,它可能只發生在滿月之上,它可能是你從未設計過的未來品牌例外。

真的想要繼續暢通無阻嗎?

更一般地說,您捕獲的異常類型是程序邏輯的組成部分。如果你不夠具體,你會有一個邏輯錯誤,故事結束 - 就像你忽略了if聲明中的一個子句一樣。

+1

ctrl-c導致一個'KeyboardInterrupt'。另一個值得注意的例外是由'sys.exit()'引發的'SystemExit'' –

+1

你提到的所有異常都不是'Exception'的子類,不會被捕獲! –

+0

@mg - 謝謝,我正在引導我的Java日子。 @喬臣 - 哎呀,我沒有想到這一點。我從來沒有試圖抓住他們,你看:P我認爲我的一般觀點仍然存在。 – detly

0

好的,還是不是,取決於上下文。如果只有一種類型的異常可能發生,或者你不關心單獨處理不同類型的問題,那麼捕獲簡單異常就完全沒問題。它也沒有性能影響。然而,如果你的代碼假設被其他人使用和修改,你可以提高可讀性,提供特定的異常。

1
>>> import urllib2 
>>> try: response = urllib2.urlopen(req) 
... except Exception, e: print e 
... 
name 'req' is not defined 
>>> 

沒有太大的意義,既不是你的代碼片段。

相關問題