संभव डुप्लिकेट:
Python FAQ: “How fast are exceptions?”अजगर - पकड़ा अपवाद
मैं पढ़ रहा है कि अजगर अपवाद के संबंध में एक "से अनुमति प्राप्त करने के बेहतर माफी की तलाश के लिए" दर्शन को लागू करता है याद । लेखक के मुताबिक, इसका मतलब है कि पाइथन कोड को बहुत से प्रयासों का उपयोग करना चाहिए - समय से पहले निर्धारित करने की कोशिश करने के बजाय क्लॉज को छोड़कर, अगर आप ऐसा कुछ करने वाले थे जो अपवाद का कारण बनता।
मैंने कुछ कोशिश की - मेरे वेब ऐप पर क्लॉज को छोड़कर जिसमें कोड चलाने के दौरान अधिकांश अपवाद उठाए जाएंगे। इसलिए, इस मामले में, अपवाद उठाना और पकड़ना आदर्श होगा। क्या यह एक दक्षता दृष्टिकोण से बुरा है? मुझे यह भी याद है कि कोई मुझे बता रहा है कि उठाए गए अपवाद को पकड़ने के लिए एक बड़ा प्रदर्शन ओवरहेड है।
क्या यह अनावश्यक रूप से प्रयास करने के लिए अक्षम है - क्लॉज को छोड़कर जिसमें आप अपवाद की उम्मीद करते हैं और लगभग हर समय पकड़े जाते हैं?
यहां कोड है - यह उन वस्तुओं की जांच करने के लिए 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
पहले एक शायद ही कभी अपवाद ले जाएगा के बाद से अभी हम लागू करने कर रहे हैं प्राथमिक विधि नए उपयोगकर्ताओं साइट में शामिल होने के लिए के रूप में "फेसबुक के साथ प्रवेश करें"। लेकिन, ट्विटर और फोरस्क्वेयर वैकल्पिक हैं, अगर वे दोस्तों या अनुयायियों को आयात करना चाहते हैं, और मुझे उम्मीद है कि ज्यादातर लोग नहीं करेंगे।
मैं इस तर्क को कोड करने के बेहतर तरीके के लिए खुला हूं।
कोड का विशिष्ट उदाहरण क्या है? –
"अनुमति मांगने से क्षमा मांगने के लिए बेहतर" लागू करना हर जगह जहां यह लागू होता है निश्चित रूप से सबसे अच्छा विचार नहीं है। इस पर विचार करें: यदि आप जानते हैं कि 'try..catch' के अंदर कोड को 95% कॉल में अपवाद उठाया गया है, तो आप इसे बेहतर ढंग से लिखेंगे। –
एक कहानियां जो आसपास जाती है वह है "असाधारण मामलों के लिए अपवाद हैं"। मुझे लगता है कि यदि आप अधिकतर समय में अपवाद की उम्मीद कर रहे हैं, तो आप गलत तरीके से अपवादों का उपयोग कर रहे हैं। –