6

मैं ruby wrapper (createsend-ruby) का उपयोग कर CampaignMonitor's API के साथ बातचीत कर रहा हूं और मैं बस सोच रहा हूं कि आप त्रुटि/अपवाद हैंडलिंग के रूप में क्या सलाह देंगे। मैं केवल शुरुआत/बचाव/अंत का उपयोग करने के बारे में सोच रहा था, लेकिन मैं सिर्फ यह जानना चाहता हूं कि इस तरह की चीज़ के लिए कोई बेहतर तकनीक है (जब आप किसी तृतीय-पक्ष API से निपट रहे हों)।रूबी पर रूबी में बाहरी एपीआई कॉल करते समय त्रुटियों/अपवादों को कैसे संभालें?

begin 
    list_id = CreateSend::List.create client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page 
rescue Exception => e 
    logger.error "[error] CampaignMonitor error: #{e}" 
    return false 
end 

उदाहरण के लिए, आप विशिष्ट अपवाद को पकड़ने और व्यक्तिगत रूप से उन लोगों के साथ सौदा करने की कोशिश करेगा?

rescue CreateSend::BadRequest => e 

या यह व्यक्तिगत वरीयता और/या ऐप आवश्यकताओं का मामला है?

आपके समय के लिए धन्यवाद!

उत्तर

7

मैं आम तौर पर उन सभी को पकड़ने और वहां से जाने के लिए एक अपवाद के साथ शुरू करता हूं। यदि कोई विशेष त्रुटि होती है जो अक्सर आती है या किसी दूसरे से अलग तरीके से संभालने की आवश्यकता होती है, तो बस अपने नीचे एक और बचाव ब्लॉक जोड़ें ताकि अपवाद वहां पकड़ा जा सके। आप इसे सही कर रहे हैं :)

जब संभव हो तो rescue Exception से बचें, एक साधारण rescue चाल चलाना चाहिए।

बस स्पष्ट करने के लिए, आप बचाव के किसी भी संख्या है और साथ ही एक सुनिश्चित कर सकते हैं:

begin 
    do_something 
rescue CS::BadRequest => e 
    logger.error "..." 
rescue CS::TimeoutError => e 
    do_something_that_retries 
rescue => e 
    logger.error "..." 
ensure 
    send_email_to_admin 
end 
+0

आप कृपया समझा सकते हैं * क्यों * 'बचाव Exception' से बचा जाना चाहिए जब संभव हो (और सिर्फ' अकेले rescue' इस्तेमाल किया जाना चाहिए)? साथ ही, 'अपवाद' निर्दिष्ट करने से बचना संभव नहीं होगा? – user664833

+4

'बचाव 'से अपने बचाव पर' बचाव' और उसके बच्चों को जो आपको 99% समय की आवश्यकता है, जबकि 'बचाव अपवाद' श्रृंखला को ऊपर ले जाता है और सिग्नल, सिस्टम निकास, कोई स्मृति त्रुटियों और स्क्रिप्ट से बचाता है त्रुटियों। जब तक आप किसी विशेष कारण से 'बचाव अपवाद' का उपयोग नहीं कर रहे हैं, तो आपको इसका उपयोग नहीं करना चाहिए। – bensie

संबंधित मुद्दे