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

रूबी में अपवाद

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

raise 'this is an exception'
 
puts "This message won't be printed."

कार्रवाई में अपवाद देखने का सबसे तेज़ तरीका है कि आप स्वयं को उठाएं। raise . का उपयोग करके एक संदेश के साथ विधि, रूबी एक RuntimeError बनाएगी इसके विवरण के रूप में पारित पाठ के साथ। यह एक स्टैक ट्रेस भी जोड़ देगा जो इंगित करता है कि आपके कोड में अपवाद कहाँ से उठाया गया था।

$ ruby raise.rb
raise.rb:1:in `<main>': this is an exception (RuntimeError)

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

विभिन्न प्रकार के अपवाद

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

irb(main):001:0> 42/0
ZeroDivisionError: divided by 0
        from (irb):1:in `/'
        from (irb):1
        from /Users/jeff/.asdf/installs/ruby/2.3.0/bin/irb:11:in `<main>'

इस मामले में, अपवाद का प्रकार है ZeroDivisionError , के बजाय RuntimeError हमने पहले देखा। रूबी के अपवाद पदानुक्रम को बनाने के लिए दर्जनों अपवाद प्रकार हैं, और वे सभी अलग-अलग स्थितियों में उठाए गए हैं।

RuntimeError एक अधिक सामान्य अपवाद वर्ग है, लेकिन अधिक विशिष्ट उदाहरण हैं। एक NoMethodError एक ऐसी विधि को कॉल करने का प्रयास करते समय उठाया जाता है जो मौजूद नहीं है, और एक ArgumentError नोट करता है कि उदाहरण के लिए, गलत तर्क मौजूदा पद्धति को पास कर दिए जाते हैं।

बचाव अपवाद

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

इस तरह के मामले में, एक अपवाद उठाया जा सकता है, लेकिन कॉल स्टैक के शीर्ष पर पहुंचने से पहले इसे वेब सर्वर द्वारा बचाया जाएगा, जो अपवाद को एप्लिकेशन को क्रैश होने से रोकता है।

begin
  raise 'this is an exception'
rescue RuntimeError => exception
  puts "Exception rescued: #{exception.inspect}"
  # => "Exception rescued: #<RuntimeError: this is an exception>"
end
 
puts "This message *will* be printed."

उदाहरण को प्रारंभ/बचाव ब्लॉक में पहले से लपेटकर, अपवाद नहीं उठाया जाएगा, और यह हमारे ऐप को क्रैश नहीं करेगा। इसके बजाय, बचाव-ब्लॉक निष्पादित हो जाता है, जो इस मामले में अपवाद की व्याख्या करने वाले संदेश को प्रिंट करता है, विफल कर दिया गया था। साथ ही, क्योंकि यह हमारे ऐप को क्रैश होने से रोकता है, अंतिम संदेश होगा मुद्रित हो जाओ।

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

अपवाद से निपटने के बारे में अधिक गहन प्राइमर के लिए, और अपवादों को ठीक से कैसे बचाया जाए, इस पर कुछ सुझावों के लिए, रूबी मैजिक पर हमारे अपवाद प्राइमर देखें।

रूबी में अपवादों को बढ़ाने या पकड़ने के बारे में कोई प्रश्न हैं? कृपया हमें @AppSignal पर बताने में संकोच न करें। बेशक, हमें यह जानना अच्छा लगेगा कि आपको यह लेख कैसा लगा, या यदि आपके पास कोई अन्य विषय है जिसके बारे में आप अधिक जानना चाहते हैं।


  1. रूबी में कस्टम अपवाद

    रूबी में अपने स्वयं के अपवाद बनाना आसान है। बस इन चरणों का पालन करें: 1. एक नई कक्षा बनाएं अपवाद वर्ग हैं, जैसे रूबी में बाकी सब कुछ! एक नए प्रकार का अपवाद बनाने के लिए, बस एक ऐसा वर्ग बनाएं जो StandardError या उसके किसी बच्चे से विरासत में मिला हो। class MyError < StandardError end raise MyErr

  1. रूबी में अपवादों में संदर्भ डेटा कैसे जोड़ें

    कभी-कभी मानक बैकट्रैक/त्रुटि संदेश कॉम्बो पर्याप्त नहीं होता है। त्रुटि के कारण का पता लगाने के लिए कभी-कभी आपको अतिरिक्त डेटा की आवश्यकता होती है। सौभाग्य से, रूबी में करना बहुत आसान है। त्रुटि संदेश को अनुकूलित करना अपनी त्रुटियों में प्रासंगिक जानकारी जोड़ने का सबसे आसान तरीका इसे अपवाद के संदेश

  1. रूबी में जटिल अपवाद व्यवहार का पता लगाने के लिए ट्रेसपॉइंट का उपयोग करना

    कभी-कभी यह समझना वास्तव में कठिन हो सकता है कि अपवादों के साथ क्या हो रहा है - विशेष रूप से बड़े ऐप्स में। कल्पना कीजिए कि आप किसी मौजूदा प्रोजेक्ट के अंदर किसी कोड पर काम कर रहे हैं। आप अपवाद उठाते हैं, फिर कुछ अजीब होता है। शायद अपवाद निगल लिया गया है। शायद एक पर्यावरण चर बदल गया है। हो सकता है कि