उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर
अपवाद प्रबंधन
कई अपवाद
उद्देश्य
एकाधिक अपवादों का उपयोग करके कुछ चिकित्सा आपूर्ति को क्रेटों में एकत्रित करें और सही ढंग से संग्रहित करें।
छत में स्थित भंडारण कक्षों को पुनःपूर्ति की आवश्यकता है, कुछ आपूर्ति का उपयोग किया गया था लेकिन उन्हें कभी प्रतिस्थापित नहीं किया गया। एक स्टोररूम में एक मेमो में अधिक सामग्री का आदेश दिया गया है, इसलिए इसे निपटाना एक अच्छा विचार होगा। इसका अर्थ है कि विभिन्न प्रकार की सामग्री को एकत्रित कर क्रेटों में संग्रहित करना होगा।
क्रेटों को भरने के लिए विभिन्न डेटा प्रकारों और सामग्रियों की संख्या के कारण, हमें विभिन्न त्रुटियों का सामना करना पड़ सकता है। हम संभावित त्रुटियों को पकड़ने और कुछ मुद्दों को ठीक करने के लिए try / except का उपयोग कर सकते हैं, लेकिन अगर एक ही ऑपरेशन में कई संभावित त्रुटियाँ उत्पन्न होती हैं तो क्या होगा? इस समस्या का समाधान करने के लिए, हम यह निर्दिष्ट कर सकते हैं कि हम किस अपवाद को पकड़ने का प्रयास कर रहे हैं और एकाधिक अपवादों का उपयोग कर सकते हैं।
शुरू करने के लिए, सुनहरे X निशान तक चलें और दरवाजे की ओर मुड़ें, स्टोररूम में प्रवेश करने के लिए open() फ़ंक्शन का उपयोग करें। एक बार अंदर जाने पर, डार्क X निशान तक जाएँ और दाएँ मुड़ें ताकि read() फ़ंक्शन का उपयोग करके मेमो पर टेबल पर लिखे गए आदेश में कौन सी सामग्री और मात्रा मांगी गई है की जाँच की जा सके। मेमो में सूची स्थिरांक (list constants) पर जानकारी लिखी गई है, जिसमें आपूर्ति और उनके ऑर्डर शामिल हैं। एक बार यह हो जाने पर, स्टोररूम के अंदर हल्के X निशान तक जाएँ, क्रेट की ओर मुड़ें और collect() फ़ंक्शन का उपयोग करके अंदर की pads सूची स्थिरांक सामग्री को पकड़ें, इस प्रकार: player.collect(pads) .
स्टोरहाउस के अंदर "peroxide" और "isopropyl" के स्टोर मौजूद हैं, वहाँ जाएँ और सभी को एकत्र करें, फिर बाहर निकलें और बैंगनी कालीन पर डार्क X निशान की ओर बढ़ें। बैंगनी कालीन पर, क्रेट की ओर मुख करके, collect() फ़ंक्शन का उपयोग करके "water bottle" को पकड़ें, फिर पीले कालीन पर डार्क X निशान की ओर जाएँ और collect() फ़ंक्शन का उपयोग करके "glass bottle" को पकड़ें।
अब जब वस्तुएँ इकट्ठी कर ली गई हैं, तो आदेश को पूरा करने और सभी सामग्रियों को स्टोरहाउस के दाहिने ओर स्थित क्रेटों में रखने का समय आ गया है। ऐसा करने के लिए, हम पहले "water bottle", "peroxide", और "isopropyl" को एक सूची नामक supplies में स्टोर करेंगे। डार्क X निशान वाले red, green और blue कालीनों पर हम चिकित्सा आपूर्तियों को संग्रहित करने के लिए क्रेटों का उपयोग करेंगे। इसके लिए हम तीन सूचियाँ बनाएंगे: blue_crate = [] , green_crate = [] और red_crate = [] .
सभी वस्तुओं को रखने से पहले हमें सभी सूचियों को सामग्रियों से भरना होगा, इसके लिए हम एक लूप का उपयोग करेंगे जो सूचियों में इटरेट करेगा और उन्हें एक एकल सूची में मिलाएगा। यह supplies की सभी वस्तुओं को सूची में रखेगा और स्टोररूम में मेमो पर दिए गए order के अनुसार pads आइटमों की संख्या को विभाजित करेगा।
for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])
इसके बावजूद, आप देखेंगे कि त्रुटियाँ उत्पन्न होंगी, भले ही सब कुछ सही ढंग से किया गया हो और कोड सटीक हो। समस्या यह है कि supplies सूची में केवल तीन (3) आइटम हैं, लेकिन लूप पांच (5) बार चलता है जिससे एक Index Error होता है। इसी बीच, pads सूची में न केवल केवल तीन (3) आइटम हैं, बल्कि आदेश मानों में से एक मान भी 0 है, और किसी भी संख्या को 0 से विभाजित करने पर Zero Division Error होता है क्योंकि गणित में किसी भी संख्या को 0 से विभाजित नहीं किया जा सकता।
यहीं पर एकाधिक अपवाद उपयोगी होते हैं, हम try / except कोड ब्लॉक्स का उपयोग करके त्रुटियों को पकड़ते हैं और कोड के साथ आगे बढ़ने की अनुमति देते हैं। चूंकि दो त्रुटियाँ हो रही हैं, हमें प्रत्येक त्रुटि की पहचान करनी होगी ताकि विशिष्ट अपवादों को पकड़ा जा सके। यह काम इस प्रकार किया जाता है: except IndexError: और except ZeroDivisionError:। उदाहरण के लिए:
for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)
Index Error को सूची में लापता स्थानों को "glass bottle" से भरकर सही किया जाता है और Zero Division Error को उस स्थिति में 0 जोड़कर निपटाया जाता है।
इसे blue_crate = [], green_crate = [] और red_crate = [] सूचियों के लिए करें। डार्क X निशान वाले blue, green और red कालीनों तक जाएँ और place() फ़ंक्शन का उपयोग करके सूचियों को संबंधित क्रेटों में स्टोर करें ताकि स्तर पूरा हो सके।