2009-12-03 17 views
19

मैं इस कोड चलाने के लिए तैयार हूँ, लेकिन इससे पहले कि मैं अपवाद हैंडलिंग ठीक करने के लिए करना चाहते हैं:कैसे अपवाद हैंडलिंग के बाद पाश के लिए करने के लिए वापस पाने के लिए

for l in bios: 
    OpenThisLink = url + l 
    try: 
     response = urllib2.urlopen(OpenThisLink) 
    except urllib2.HTTPError: 
     pass 
    bio = response.read() 
    item = re.search('(JD)(.*?)(\d+)', bio) 
    .... 

के रूप में सुझाव दिया here, मैं try...except लेकिन अब अगर एक जोड़ा पेज नहीं खुलता है मुझे यह त्रुटि मिलती है:

bio = response.read() 
NameError: name 'response' is not defined 

तो प्रोग्राम निष्पादित करना जारी है। इसके बजाय मैं इसे लूप के लिए वापस जाना चाहता हूं और अगले यूआरएल को आजमाएं। मैंने के बजाय break की कोशिश की लेकिन यह कार्यक्रम समाप्त होता है। कोई सुझाव?

उत्तर

34

break के बजाय continue का उपयोग करें।

कथन pass एक नो-ऑप है (जिसका अर्थ है कि यह कुछ भी नहीं करता है)। कार्यक्रम अभी भी अगले बयान जारी है, यही कारण है कि आपको एक त्रुटि मिलती है।

break लूप से बाहर निकलता है और लूप के तुरंत बाद अगले कथन से चल रहा है। इस मामले में, कोई और कथन नहीं है, यही कारण है कि आपका प्रोग्राम समाप्त हो गया है।

continue लूप को पुनरारंभ करता है लेकिन अगले आइटम के साथ। यह वही है जो आप चाहते हैं।

+5

पास बेहतर सुझाव है कि प्रतिक्रिया मौजूद है की आवश्यकता होगी इसे पकड़ा जाता है जहां यह पकड़ा गया था, बस अधिकांश burglers की तरह। – jathanism

+0

धन्यवाद। 'जारी रखें' ठीक काम करता है। – Zeynel

+2

@jathanism: नहीं, यह नहीं करता है। यदि आप इसे फिर से या कुछ नहीं उठाते हैं, तो यह 'छोड़कर' ब्लॉक के बाद बयान जारी है। – drevicko

10

कोशिश करें वास्तव में उससे अधिक शक्तिशाली तरीका है। आप यहां अन्य ब्लॉक का भी उपयोग कर सकते हैं:

try: 
    stuff 
except Exception: 
    print "oh no a exception" 
else: 
    print "oh yay no exception" 
finally: 
    print "leaving the try block" 
+0

यह सही अपवाद हैंडलिंग है जो मुझे मेरे समाधान के लिए प्रेरित करता है। धन्यवाद! – Rockbar

1

आपको वह त्रुटि मिल रही है क्योंकि जब अपवाद फेंक दिया जाता है तो प्रतिक्रिया चर मौजूद नहीं है। आप कोड को छोड़ने के लिए चाहते हैं, तो आप इसे कैसे है आप की जाँच करने के पहले पढ़ कॉल

if response: 
    bio = response.read() 
    ... 

कहा कि मैं मार्क के साथ सहमत हैं कि continue एक अपवाद के बाद से pass

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