の効率化の可能性の重複:
Python FAQ: “How fast are exceptions?”Pythonの - キャッチ例外
私はPythonは例外に関して「許可を求めるするよりも許しを求めることより良い」哲学を実装していることを読んで覚えています。作者によると、これはPythonコードが例外を引き起こすようなことをしようとしているかどうかを事前に判断するのではなく、多くのtry - except節を使うべきだということを意味していました。
私は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は、友達やフォロワーをインポートしたい場合に備えてオプションです。ほとんどの人がそうしないと思います。
私はこのロジックをより良い方法でコーディングすることができます。
コードの具体例は何ですか? –
「許諾を求めるよりも許してもらう」を適用することは、どこでも当てはまりますが、確かにベスト・アイデアではありません。これを考えてみましょう: 'try..catch'内のコードへの呼び出しの95%で例外が発生しているとわかったら、それを書き直してください。 –
「例外は例外的な場合です」ということです。ほとんどの場合、例外が予想される場合は、間違った方法で例外を使用している可能性があります。 –