यह बतख टाइपिंग की प्रकृति के बारे में कम सवाल है और पायथोनिक रहने के बारे में अधिक है, मुझे लगता है।
सबसे पहले - जब डिट्स से निपटना, विशेष रूप से जब हुक की संरचना काफी अनुमानित है और दी गई कुंजी आम तौर पर मौजूद नहीं है, लेकिन कभी-कभी होती है, तो मैं पहले दो दृष्टिकोणों के बारे में सोचता हूं:
if myKey in dict:
do_some_work(dict[myKey])
else:
pass
और हां ये ओल्डे 'माफी बनाम अनुमति' दृष्टिकोण।
try:
do_some_work(dict[myKey])
except KeyError:
pass
एक यात्राकर्ता पायथन लड़के के रूप में, मुझे ऐसा लगता है कि मैं देख रहा हूं कि बाद वाले को बहुत पसंद किया गया है, जो केवल अजीब लगता है क्योंकि मुझे लगता है क्योंकि पायथन डॉक्स को try/exceptsलगता है कि जब कोई वास्तविक गलती होती है तो पसंद किया जाता है, एक उम के विपरीत ... सफलता की अनुपस्थिति?
अगर कभी-कभार तानाशाह के पास मेरे फैसले में चाबी नहीं है, और यह पता है कि यह हमेशा उस कुंजी के पास नहीं होगा, तो यह एक कोशिश है / संदर्भ को छोड़कर भ्रामक है? यह एक प्रोग्रामिंग त्रुटि नहीं है, यह डेटा का सिर्फ एक तथ्य है - यह तानाशाह के पास केवल उस विशेष कुंजी की आवश्यकता नहीं है।
यह विशेष रूप से महत्वपूर्ण लगता है जब आप कोशिश को देखते हैं / सिवाय इसके / सिंटैक्स, जो वास्तव में उपयोगी लगता है जब यह सुनिश्चित करने की बात आती है कि कोशिश बहुत अधिक त्रुटियों को नहीं पकड़ रही है। आप कुछ ऐसा करने में सक्षम हैं:
try:
foo += bar
except TypeError:
pass
else:
return some_more_work(foo)
क्या यह सभी प्रकार की अजीब त्रुटियों को निगलने के लिए नेतृत्व नहीं है जो शायद कुछ बुरे कोड का परिणाम है? उपरोक्त कोड आपको केवल यह देखने से रोक सकता है कि आप जोड़ने की कोशिश कर रहे हैं 2 + {}और आपको कभी भी यह महसूस नहीं हो सकता है कि आपके कोड का कुछ हिस्सा बुरी तरह से गलत हो गया है। मेरा सुझाव है कि हमें सभी प्रकारों की जांच करनी चाहिए, यही कारण है कि यह पायथन और जावास्क्रिप्ट नहीं है - लेकिन फिर से कोशिश / छोड़कर के संदर्भ के साथ, ऐसा लगता है कि यह प्रोग्राम को ऐसा करने के लिए पकड़ना चाहिए जो इसके बजाय ऐसा नहीं करना चाहिए। इसे आगे बढ़ाने में सक्षम बनाना।
मुझे लगता है कि उपरोक्त उदाहरण एक स्ट्रॉ-मैन तर्क का कुछ है, और वास्तव में जानबूझकर बुरा है। लेकिन मुझे दिया गया अजगर पंथ better to ask forgiveness than permissionमदद नहीं कर सकता है, लेकिन यह महसूस करता है कि यह सवाल उठता है कि रेत में रेखा वास्तव में कहां के सही अनुप्रयोग के बीच है / अन्यथा बनाम कोशिश / को छोड़कर, विशेष रूप से है, जब आप जानते हैं कि क्या होने की उम्मीद है वह डेटा जिसके साथ आप काम कर रहे हैं।
मैं यहां गति की चिंताओं या सर्वोत्तम अभ्यास के बारे में भी बात नहीं कर रहा हूं, मैं केवल उन मामलों के कथित वेन आरेख से चुपचाप भ्रमित हूं, जहां ऐसा लगता है कि यह किसी भी तरह से जा सकता है, लेकिन लोग एक कोशिश के अलावा / पीछे छोड़ देते हैं क्योंकि 'किसी ने कहा था कि यह पाइथोनिक था'। क्या मैंने इस वाक्य रचना के अनुप्रयोग के बारे में गलत निष्कर्ष निकाला है?