Ruby ले begin/rescue/ (try/catch/finally को Ruby को समतुल्य) को साथ त्रुटिहरू संभाल्छ। तपाई अपवादहरू गर्नुहुन्छ र तिनीहरूलाई गर्नुहुन्छ, सफाइको लागि संग। Ruby ले क्लिनर कोडको लागि विधि-स्तरीय rescue (स्पष्ट बिना) पनि अनुमति दिन्छ।
Ruby ले begin/rescue/ (try/catch/finally को Ruby को समतुल्य) को साथ त्रुटिहरू संभाल्छ। तपाई अपवादहरू गर्नुहुन्छ र तिनीहरूलाई गर्नुहुन्छ, सफाइको लागि संग। Ruby ले क्लिनर कोडको लागि विधि-स्तरीय rescue (स्पष्ट बिना) पनि अनुमति दिन्छ।
ensureraiserescueensurebeginbegin
result = risky_operation
rescue ArgumentError => e # rescue a SPECIFIC exception type
puts "Bad argument: #{e.message}"
rescue StandardError => e # broader catch (StandardError, not Exception)
puts "Error: #{e.message}"
retry if attempts < 3 # retry can re-run the begin block
else
puts "succeeded" # runs if NO exception
ensure
cleanup # ALWAYS runs (success or failure)
end
begin/rescue/ensure Ruby को try/catch/finally हो। विशिष्ट प्रकारहरू Rescue गर्नुहोस् (rescue ArgumentError), गारान्टीयुक्त सफाइको लागि ensure प्रयोग गर्नुहोस्, र त्रुटि-नभएको अवस्थाको लागि else प्रयोग गर्नुहोस्। retry ले ब्लकलाई पुनः प्रयास गर्न सक्छ।
rescue => e # ✅ bare rescue catches StandardError (the right default)
rescue StandardError # ✅ explicit, same thing
rescue Exception # ❌ AVOID — catches EVERYTHING including system signals
# (Interrupt/Ctrl-C, SystemExit) — can break the program
महत्त्वपूर्ण: खाली rescue ले StandardError (अनुप्रयोग त्रुटिहरूको लागि सही पूर्वनिर्धारण) पकड्छ। Exception (रूट) को Rescue गर्नु सबै कुरा पकड्छ, प्रणाली-स्तरीय संकेतहरू जस्तै Interrupt (Ctrl-C) र SystemExit सहित — जो तपाई सामान्यतः पकड्न नचाहनुहुन्छ, किनकि यसले प्रोग्रामलाई बाधित वा बन्द हुन रोक्न सक्छ। एक सामान्य Ruby गल्ती।
raise ArgumentError, "Amount must be positive" # raise a built-in
raise "Something failed" # raises RuntimeError
# custom exception class
class InsufficientFundsError < StandardError # inherit from StandardError
def initialize(msg = "Not enough funds")
super
end
end
raise InsufficientFundsError
def process
do_work
rescue => e # rescue WITHOUT begin — applies to the whole method body
handle(e)
ensure
cleanup
end
उचित अपवाद प्रबन्धन सशक्त Ruby अनुप्रयोगहरूको लागि आवश्यक छ, र Ruby को दृष्टिकोण — यसको विशिष्ट मुहावराहरू र सावधानीहरू सहित — बुझ्नु महत्त्वपूर्ण छ।
begin/rescue/ensure संरचना (Ruby को try/catch/finally), विशिष्ट अपवाद प्रकारहरू Rescue गर्नु, गारान्टीयुक्त सफाइको लागि ensure प्रयोग गर्नु, र क्लिन विधि-स्तरीय rescue (स्पष्ट begin बिना) दैनिक मौलिक ज्ञान हो।
विशेष गरी महत्त्वपूर्ण र भिन्न Ruby बिन्दु StandardError बनाम Exception भेद हो: खाली rescue (र सही पूर्वनिर्धारण) ले StandardError पकड्छ, तर Exception (पदानुक्रमको रूट) को Rescue गर्नु सबै कुरा पकड्छ — Interrupt (Ctrl-C) र SystemExit जस्तै प्रणाली संकेतहरू सहित — जो तपाई लगभग कहिले पनि चाहनुहुन्न, किनकि यसले प्रोग्रामलाई बाधित वा बन्द हुन रोक्न सक्छ, र यो एक सामान्य, हानिकारक गल्ती हो।
तपाईले अनुप्रयोग त्रुटिहरूको लागि StandardError Rescue गर्नु (साधारण Exception होइन) को लागि बुझ्नु महत्त्वपूर्ण Ruby-विशिष्ट ज्ञान हो जो वास्तविक बगहरूलाई रोक्छ।
संरचना, custom exception वर्गहरू (StandardError बाट वंशगत), retry, विधि-स्तरीय rescue मुहावरा, र विशेष गरी StandardError-not-Exception सावधानी जान्नु सशक्त, सही Ruby लेखनको लागि महत्त्वपूर्ण हो जसले त्रुटिहरूलाई प्रोग्रामको क्षमता बाधित गर्न बिना सुंदरतासँग सम्भाल्छ।
संभालिएको त्रुटिहरू र Exception-rescuing गल्ती दुवै वास्तविक समस्याहरू निर्माण गरेकोले, Ruby को अपवाद प्रबन्धन मास्टर गर्नु — यसको संरचना, मुहावराहरू, र महत्त्वपूर्ण StandardError बनाम Exception भेद — विश्वसनीय Ruby विकास र एक सामान्य अन्तर्वार्ता विषयको लागि महत्त्वपूर्ण, बारम्बार-प्रासङ्गिक ज्ञान हो।