我正在製作一個GUI,我發現自己正在使用很多try
except
陳述。我的問題是,我應該重新設計我的程序,以便使用更少的try
except
語句或者是try
except
是一個在python程序中使用的良好實踐嗎?我喜歡它們是因爲它們具有豐富的信息,並且使我更容易進行調試。只是想知道真正的開發者是怎麼想的。嘗試除編程禮儀
感謝
我正在製作一個GUI,我發現自己正在使用很多try
except
陳述。我的問題是,我應該重新設計我的程序,以便使用更少的try
except
語句或者是try
except
是一個在python程序中使用的良好實踐嗎?我喜歡它們是因爲它們具有豐富的信息,並且使我更容易進行調試。只是想知道真正的開發者是怎麼想的。嘗試除編程禮儀
感謝
Python的成語是:It's easier to ask for forgiveness than for permission.(Python的詞彙,看看EAFP)。
因此,使用異常處理來構造程序流是完全可以接受的(並且與其他語言相比,速度也相當快)。它非常適合Python的動態特性。
決定是否捕獲異常的一個重要考慮因素是您可能隱藏的合法錯誤。
例如,考慮下面的代碼:
try:
name = person['name']
except KeyError:
name = '<none provided>'
這是合理的,如果person
被稱爲是一個dict
...但如果person
都不可能更復雜的東西,例如:
class Person(object):
def __getitem__(self, key):
return do_something(key)
您冒着意外捕獲由合法錯誤導致的異常(例如do_something
中的錯誤)的風險。
我覺得有必要提一下:你應該never, ever (except under a couple of very specific circumstances) use a "naked" except:
。
我個人的偏好是儘可能避免捕捉異常(例如,使用name = person.get('name', '<none provided>')
),這兩者都是因爲我覺得它更乾淨,而且我不喜歡try/catch塊的外觀。
+1一個很好的寫法。 – ChristopheD
+1我絕對同意使用'get(name,default)'而不是'try' /'except'替代方法 –
很難對是否應該使用更少的異常處理給出一個普遍的答案......你絕對可以做太多太少。捕捉每個可能的異常幾乎肯定是錯誤的,而且幾乎可以肯定是不會做異常處理的錯誤。
這裏有一些事情要考慮:
要了解更多信息,請執行Google搜索「異常處理指南」。您看到的許多結果將用於其他語言/環境,但這些概念也適用。
你能更具體嗎? 「良好做法」是什麼意思?如果您需要捕獲異常,則需要捕獲異常。有什麼選擇? – jterrace
如果它能幫助你更好地理解你自己的程序,並讓你的生活更輕鬆,那就去做吧。你不是要在地球上編寫最好的代碼,對吧? – hochl
@jterrace:這實際上與Python的工作原理有關,比你想象的更多。 [EAFP](http://docs.python.org/glossary.html#term-eafp)是常用的方法,但我相信它也可能被破壞。 _Diaper反模式是其中一個例子。 – Tadeck