सामान्य शब्दों में (जरूरी नहीं अजगर), मैं सभी में "ट्राई-तो-बताओ मुझे-अगर यह चला गया-गलत" विधि (अपवाद) लेकिन सरलतम मामलों पसंद करते हैं। ऐसा इसलिए है क्योंकि, थ्रेडेड वातावरण में या डेटाबेस पहुंच के दौरान, अंतर्निहित डेटा कुंजी जांच और मूल्य निष्कर्षण के बीच बदल सकता है।
यदि आप वर्तमान धागे के बाहर सहयोगी सरणी नहीं बदल रहे हैं, तो आप "चेक-फर्स्ट-फिर-निकालें" विधि कर सकते हैं।
लेकिन यह सामान्य मामले के लिए है।
return d.get (c, "N/A")
मैं क्या मैं पहले पैराग्राफ में कहा गया है स्पष्ट करेंगे: यहाँ, विशेष रूप से, आप get
विधि है जो करता है, तो कुंजी मौजूद नहीं है आप एक डिफ़ॉल्ट निर्दिष्ट कर सकते हैं का उपयोग कर सकते हैं।ऐसी परिस्थितियों में जहां अंतर्निहित डेटा जांच और उपयोग के बीच बदल सकता है, आपको हमेशा अपवाद-प्रकार ऑपरेशन का उपयोग करना चाहिए (जब तक आपके पास कोई ऐसा ऑपरेशन न हो जो उपरोक्त वर्णित d.get()
जैसी कोई समस्या न हो)। उदाहरण के लिए विचार करें निम्न दो धागा समय लाइनों:
+------------------------------+--------------------+
| Thread1 | Thread2 |
+------------------------------+--------------------+
| Check is NY exists as a key. | |
| | Delete NY key/val. |
| Extract value for NY. | |
+------------------------------+--------------------+
धागा 1 प्रयास मान प्राप्त करने के है, यह वैसे भी एक अपवाद मिल जाएगा, तो आप संभावना के लिए भी सिर्फ कोड और प्रारंभिक जांच निकाल सकते हैं।
डेटाबेस के बारे में टिप्पणी भी प्रासंगिक है क्योंकि यह एक और स्थिति है जहां अंतर्निहित डेटा बदल सकता है। यही कारण है कि मैं चाबियों की सूची प्राप्त करने के बजाय परमाणु एसक्यूएल (जहां संभव हो) पसंद करना चाहता हूं, फिर व्यक्तिगत विवरणों के साथ उन्हें संसाधित करना।
को छोड़कर: खराब कर्म है। हमेशा पकड़ने में आपकी रुचि रखने के बारे में विशिष्ट रहें, इस मामले में KeyError – richo
आपने एक खराब उदाहरण चुना है। स्पष्ट उत्तर में न तो शैली शामिल है। – Omnifarious