2013-09-25 25 views
8

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

यह मुझे कुछ सेकंड के बाद मिलता है।

error <type 'exceptions.IOError'> 

यहाँ इन-वार्डों अपने try/except संरचना अधिक रखो मेरी कोड

import os 
path = 'Y:\\Files\\' 
listing = os.listdir(path) 
try: 
    for infile in listing: 
     if infile.startswith("ABC"): 
      fo = open(infile,"r") 
      for line in fo: 
       if line.startswith("REVIEW"): 
        print infile 
      fo.close() 
except: 
    print "error "+str(IOError) 
    pass 
+0

"मैं भले ही एक अपवाद है जारी रखने के लिए कोशिश कर रहा हूँ" - ऐसा कभी नहीं जब तक आप कैसे अपने कार्यक्रम जारी रखना चाहिए के लिए एक स्पष्ट योजना है। यह मानते हुए कि आपके कोड को छोड़कर: ब्लॉक फ़ाइल सामग्री पर निर्भर करता है, आईओ त्रुटि के बाद जारी रखना एक बुरा विचार है। अपवाद को प्रोग्राम को इसके बजाय क्रैश करने दें, ताकि आप वास्तव में अंतर्निहित समस्या को नोटिस कर सकें। –

उत्तर

25

है। अन्यथा जब आपको कोई त्रुटि मिलती है, तो यह सभी लूप को तोड़ देगा।

शायद पहले फॉर-लूप के बाद, try/except जोड़ें। फिर यदि कोई त्रुटि उठाई जाती है, तो यह अगली फ़ाइल के साथ जारी रहेगी।

for infile in listing: 
    try: 
     if infile.startswith("ABC"): 
      fo = open(infile,"r") 
      for line in fo: 
       if line.startswith("REVIEW"): 
        print infile 
      fo.close() 
    except: 
     pass 

यही कारण है कि आप फ़ाइलों को खोलने के लिए यहां एक with बयान का उपयोग करना चाहिए का एक आदर्श उदाहरण है। जब आप open() का उपयोग कर फ़ाइल खोलते हैं, लेकिन एक त्रुटि पकड़ ली जाती है, तो फाइल हमेशा के लिए खुली रहेगी। अब से बेहतर नहीं है।

for infile in listing: 
    try: 
     if infile.startswith("ABC"): 
      with open(infile,"r") as fo 
       for line in fo: 
        if line.startswith("REVIEW"): 
         print infile 
    except: 
     pass 

अब अगर एक त्रुटि पकड़ा है, फ़ाइल, बंद कर दिया जाएगा के रूप में है कि क्या with बयान करता है।

2

आप कोड कर रहे हैं जो आप इसे करने के लिए कह रहे हैं। जब आपको अपवाद मिलता है, तो यह इस खंड तक नीचे जाता है:

except: 
    print "error "+str(IOError) 
    pass 

चूंकि उसके बाद कुछ भी नहीं है, प्रोग्राम समाप्त होता है।

इसके अलावा, pass अनिवार्य है।

+0

मैं त्रुटि पारित करने और आगे बढ़ने की कोशिश कर रहा हूं .. – Ank

+2

@ अंकुर 'पास' का अर्थ है" कुछ भी नहीं "। आपका कोड इसके बिना जारी रहेगा। समस्या यह है कि आपके 'को छोड़कर' ब्लॉक के बाद ऐसा करने के लिए कुछ भी नहीं है। –

3

लूप के अंदर कोशिश/छोड़कर ले जाएं। में की तरह:

import os 
    path = 'C:\\' 
    listing = os.listdir(path) 
    for infile in listing: 
     try:  
      if infile.startswith("ABC"): 
       fo = open(infile,"r") 
       for line in fo: 
        if line.startswith("REVIEW"): 
         print infile 
       fo.close() 
     except: 
       print "error "+str(IOError) 
संबंधित मुद्दे