मैं अपनी टिप्पणी पर थोड़ा सा विस्तार करूंगा। आप begin
वापस जाने के लिए retry
उपयोग कर सकते हैं:
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error "Error: #{ex}"
retry
end
की कोशिश कर रहा है (और प्रवेश त्रुटियों) रखेंगे कि जब तक यह काम करता है या आप मैन्युअल रूप से यह मार डालते हैं। शायद यह नहीं है कि आप क्या चाहते हैं हालांकि एक छोटी गलती आपको अनंत लूप में भेज देगी।
MAX_ATTEMPTS = 10
doc = nil
begin
doc = Nokogiri::HTML(open(url).read.strip)
rescue Exception => ex
log.error "Error: #{ex}"
attempts = attempts + 1
retry if(attempts < MAX_ATTEMPTS)
end
if(doc.nil?)
# Do something about the persistent error
# so that you don't try to access a nil
# doc later on.
end
कुछ इस तरह कई बार कोशिश करेंगे और फिर छोड़ देना: कि चारों ओर एक आसान तरीका है इसके लिए कहते हैं, कोशिश, 10 बार और फिर छोड़ देना जाने के लिए है। retry
से पहले आप sleep
कॉल भी डाल सकते हैं यदि आप अगले प्रयास से थोड़ा पहले इंतजार करना चाहते हैं या अपवाद की जांच करना चाहते हैं (संभवतः एकाधिक rescue
ब्लॉक के साथ) यह चुनने के लिए कि क्या आपको तुरंत छोड़ देना है, प्रतीक्षा करें और पुनः प्रयास करें या तुरंत पुनः प्रयास करें।
स्रोत
2011-06-14 08:16:56
सबसे पहले के रूप में इस आसान bugfixing –
सक्षम हो सकता है तुम्हारा मतलब है इस ?: 'डॉक = खुला (यूआरएल) डॉक = Nokogiri :: एचटीएमएल .read.strip (, यह nokogiri में पारित करने से separetly यूआरएल को खोलने का प्रयास डॉक्टर) ' – Sayuj
नहीं मेरा मतलब है 'डेटा = ओपन (यूआरएल) .read.strip' फिर अगली पंक्ति' डॉक्टर = नोकोगिरी :: एचटीएमएल (डेटा)' –