我記得讀了Python實現與問候例外「更好,以尋求寬恕比請求允許」的理念。根據作者的說法,這意味着Python代碼應該使用很多try - 除了子句,而不是提前確定是否要做某些可能導致異常的事情。
我剛剛在我的web應用程序中編寫了一些try - except子句,其中大部分代碼運行時會引發異常。因此,在這種情況下,提高和捕捉異常將是常態。從效率的角度來看,這是否糟糕?我還記得有人告訴我,捕捉異常會帶來很大的性能開銷。
使用try - except語句會不必要地低效,在這種語句中,您期望幾乎所有的時間都會引發異常並捕獲異常?
下面是代碼 - 它使用Django ORM檢查將用戶與各種第三方社交提供者相關聯的對象。
try:
fb_social_auth = UserSocialAuth.objects.get(user=self, provider='facebook')
user_dict['facebook_id'] = fb_social_auth.uid
except ObjectDoesNotExist:
user_dict['facebook_id'] = None
try:
fs_social_auth = UserSocialAuth.objects.get(user=self, provider='foursquare')
user_dict['foursquare_id'] = fs_social_auth.uid
except ObjectDoesNotExist:
user_dict['foursquare_id'] = None
try:
tw_social_auth = UserSocialAuth.objects.get(user=self, provider='twitter')
user_dict['twitter_id'] = tw_social_auth.uid
except ObjectDoesNotExist:
user_dict['twitter_id'] = None
第一個將很少會例外,因爲現在我們都在實施「請用facebook」作爲新用戶加入該網站的主要方法。但是,Twitter和Foursquare是可選的,以防他們想要導入朋友或追隨者,我希望大多數人不會。
我打開更好的方式來編寫這個邏輯。
代碼的具體示例是什麼? –
在適用的任何地方應用「更好地尋求寬恕而不是要求允許」絕對不是最好的主意。考慮一下:如果你知道95%的調用'try..catch'內的代碼會引發異常,那麼最好重寫它。 –
一個說法是,「例外情況是例外情況」。我認爲,如果您大多數時間都在期待異常,那麼您可能會以錯誤的方式使用異常。 –