[英]Python: how to avoid code duplication in exception catching?
在Python中處理不同的異常類型時,避免代碼重復的好方法是什么,例如。 我想要處理URLError和HTTPError模擬但不完全:
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
另一種方法是使用例如。 如果URLError和HTTPError不在繼承鏈中:
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
我應該選擇哪一種,還有另一種更好的方法嗎?
我認為你的第三個例子是最好的解決方案。
但是,如果您使用的是Python 2.6或更高版本,則可能需要使用except FooError as err
的較新的語法except FooError as err
語法。
此外,在您的示例中,第一個版本不太正確,因為URLError
處理程序已經捕獲HTTPError
,因此永遠不會到達except HTTPError
部分except HTTPError
部分。 except
s except
你必須切換兩個。 不使用此的另一個原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.