Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में "शुरू" और "बचाव" कीवर्ड का उपयोग कैसे करें

रूबी में एक आम समस्या यह है कि आपको त्रुटि संदेश मिलते हैं, जिन्हें तकनीकी शब्दों में हम "अपवाद" कहते हैं।

ये अपवाद अपेक्षित हो सकते हैं , एक फ़ाइल की तरह जो कभी-कभी उपलब्ध हो सकती है लेकिन दूसरों में अनुपलब्ध हो सकती है, या एक एपीआई जो केवल कुछ प्रतिबंधों के कारण अस्थायी रूप से उपलब्ध है, या वे अप्रत्याशित हो सकते हैं ।

आज आप अपेक्षित त्रुटियों को प्रबंधित करना सीखेंगे।

कैसे?

ठीक है, मैं आपको रूबी में "शुरू" और "बचाव" से परिचित कराता हूं, त्रुटि की स्थिति को संभालने के लिए उपयोग किए जाने वाले दो महत्वपूर्ण कीवर्ड।

वे कैसे काम करते हैं?

सबसे पहले, आपको कुछ समझने की जरूरत है।

आपके रूबी प्रोग्राम चलने के दौरान कई बिंदुओं पर एक त्रुटि को ट्रिगर कर सकते हैं।

उदाहरणों में शामिल हैं :

  • एक गैर-मौजूदा फ़ाइल को पढ़ने का प्रयास कर रहा है।
  • किसी संख्या को शून्य से विभाजित करना।
  • जिस वेब सर्वर के साथ आप काम कर रहे हैं उसका SSL प्रमाणपत्र पुराना है।

जब कोई त्रुटि होती है... रूबी तुरंत दुर्घटनाग्रस्त नहीं होती!

आपको त्रुटि से उबरने का मौका मिलता है . हम इसे "अपवाद प्रबंधन" कहते हैं।

रूबी आपको अपने कोड में त्रुटि पुनर्प्राप्ति को लागू करने के लिए कुछ कीवर्ड देता है। ये कीवर्ड हैं begin &rescue

आइए जानें कि उनका उपयोग कैसे करें!

रूबी अपवादों को कैसे हैंडल करें

आप इन अपवादों को कैसे संभालते हैं?

आप अपवाद उत्पन्न करने वाले कोड को begin . के साथ लपेट सकते हैं / rescue ब्लॉक करें।

यहां बताया गया है कि यह कैसे काम करता है…

पहला खंड (begin ), आपके पास वह कोड है जिसे आप चलाने जा रहे हैं और जो अपवाद उत्पन्न कर सकता है।

उदाहरण :

begin
  IO.sysopen('/dev/null')
rescue
  # ...
end
शुरू करें

यहां हम sysopen . के साथ एक फ़ाइल खोलने का प्रयास कर रहे हैं . यदि हम फ़ाइल नहीं खोल सकते हैं तो एक अपवाद उठाया जाता है।

rescue . का उपयोग करने का यह सही समय है कीवर्ड!

इस कीवर्ड का उपयोग करके आप कह सकते हैं कि अपवाद उठाए जाने पर आप क्या करना चाहते हैं। तो विफलता मोड आपके नियंत्रण में है।

उदाहरण :

begin
  IO.sysopen('/dev/null')
rescue
  puts "Can't open IO device."
end

आप इस त्रुटि को लॉग करना चाहते हैं और शायद किसी प्रकार का डिफ़ॉल्ट मान प्रदान करना चाहते हैं।

मत। नज़रअंदाज़ करना। त्रुटियाँ।

एकाधिक अपवादों को बचाना

आपको पता होना चाहिए कि rescue एक वैकल्पिक तर्क लेता है।

यह तर्क क्या है?

यह तर्क अपवाद वर्ग . है जिससे आप बचाव करना चाहते हैं।

यह इस बात पर निर्भर करता है कि आप कौन सा कोड चला रहे हैं।

IO के लिए :

  • यह Errno::ENOENT हो सकता है गुम फ़ाइल के लिए
  • या Errno::EACCES अनुमति त्रुटि के लिए

सबसे अच्छी बात?

आप एक ही शुरुआत/बचाव ब्लॉक में कई अपवादों को संभाल सकते हैं।

इसे पसंद करें :

begin
  IO.sysopen('/dev/null')
rescue Errno::ENOENT
  puts "File not found."
rescue Errno::EACCES
  puts "Insufficient permissions, not allowed to open file."
end

यदि आप चाहते हैं कि एक ही क्रिया एक से अधिक अपवादों के लिए हो...

आप यह कर सकते हैं :

begin
  IO.sysopen('/dev/null')
rescue Errno::ENOENT, Errno::EACCES
  puts "There was an error opening the file."
end

आइए सीखते रहें!

ब्लॉक और विधियों के अंदर अपवादों को कैसे बचाया जाए

आपको हमेशा begin . का उपयोग करने की आवश्यकता नहीं है कीवर्ड।

ऐसे मामले हैं जहां आप इसे छोड़ सकते हैं।

कहां?

अंदर के तरीके और ब्लॉक।

उदाहरण :

def get_null_device
  IO.sysopen('/dev/null')
rescue Errno::ENOENT
  puts "Can't open IO device."
end

विधि परिभाषा स्वयं begin . का काम करती है , ताकि आप इसे छोड़ सकें।

आप इसे ब्लॉक के साथ भी कर सकते हैं।

उदाहरण :

["a.txt", "b.txt", "c.txt"].map do |f|
  IO.sysopen(f)
rescue Errno::ENOENT
  puts "Can't open IO device: #{f}."
end

अब, rescue . का उपयोग करने का एक और तरीका है बिना begin . के कीवर्ड ।

आइए देखें कि यह कैसे काम करता है।

इनलाइन बचाव को समझना और यह खतरनाक क्यों है

आप rescue . का उपयोग कर सकते हैं इनलाइन।

कुछ दुर्लभ परिदृश्यों में, आपको अपवाद प्रबंधन का यह रूप उपयोगी लग सकता है।

यहां एक उदाहरण दिया गया है :

["a.txt", "b.txt", "c.txt"].select { |f| File.open(f) rescue nil }.map(&:size)

यह आपको केवल उन फ़ाइलों को खोलने की अनुमति देता है जो मौजूद हैं और जो नहीं हैं उन्हें अनदेखा करें।

परिणामस्वरूप, आपको मौजूदा फ़ाइलों का आकार मिलता है।

अपवादों को उठाए बिना।

ऐसा क्यों करते हैं?

खैर, यह आपको अपने कोड को एक पंक्ति में रखने देता है।

बस इतना ही।

rescue . के इस रूप का उपयोग करते समय एक "छिपा हुआ खतरा" होता है क्योंकि आपको StandardError . से आने वाले सभी अपवाद मिल रहे हैं ।

जो सबसे अधिक अपवाद हैं।

यह अच्छा क्यों नहीं है?

क्योंकि उनके विस्तृत चयन के बजाय केवल विशिष्ट अपवादों को ही संभालना सबसे अच्छा है।

यह स्वयं से त्रुटियों को छिपाने से बचता है!

छिपी हुई त्रुटियां सभी प्रकार के अजीब व्यवहार और हार्ड-टू-डीबग मुद्दों को जन्म दे सकती हैं।

सारांश

आपने रूबी में त्रुटियों, बुनियादी अपवाद प्रबंधन और rescue . के बारे में सीखा है / begin कीवर्ड।

कृपया इस लेख को साझा करें यदि आपको यह मददगार लगा

पढ़ने के लिए धन्यवाद!


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ