9
在Python中處理不同的異常類型時,避免代碼重複的好方法是什麼,例如。我要治療URLError和HTTPError simlar但不完全:Python:如何避免異常捕獲中的代碼重複?
try:
page = urlopen(request)
except URLError, err:
logger.error("An error ocurred %s", err)
except HTTPError, err:
logger.error("An error occured %s", err)
logger.error("Error message: %s", err.read())
在這個例子中,我想,以避免第一logger.error呼叫的重複。鑑於URLError是HTTPError的父親可以做這樣的事情:
except URLError, err:
logger.error("An error occurred %s", err)
try:
raise err
except HTTPError, err:
# specialization for http errors
logger.error("Error message: %s", err.read())
except:
pass
另一種方法是使用isinstance例如。如果URLError和HTTPError不會在繼承鏈:
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
哪一個我喜歡,有沒有其他更好的辦法?
謝謝Tim!這是令人信服的。很棒的是你在第一個例子中發現了URErrror,HTTPError排序。我不會編輯這個問題,因爲它清楚地指出了您在答案中提到的那個例子的問題。 – Bernhard