我记得读了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'内的代码会引发异常,那么最好重写它。 –
一个说法是,“例外情况是例外情况”。我认为,如果您大多数时间都在期待异常,那么您可能会以错误的方式使用异常。 –