2013-09-25 14 views
8

特定の条件に一致するフォルダからすべてのファイルを読み込もうとしています。例外が発生すると、プログラムがクラッシュします。私は例外があっても実行をやめようとしていますが、まだ実行を停止します。例外の後にPythonコードを続行する

これは数秒後に得られるものです。

error <type 'exceptions.IOError'> 

ここに私のコードは

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

は、「私は、例外があります場合でも、継続しようとしています」。 except:ブロックの後のコードがファイルの内容に依存していると仮定すると、IOエラーが発生した後も継続するのは悪い考えです。代わりに例外をプログラムにクラッシュさせて、実際に問題に気づいて修正することができます。 –

答えて

25

以上で、病棟あなたtry/except構造を入れてください。それ以外の場合、エラーが発生すると、すべてのループが中断されます。

おそらく最初のfor-loopの後に、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()を使用してファイルを開くと、エラーがキャッチされますが、ファイルは永遠に開いたままです。 今は決してより優れていません。エラーがキャッチされた場合にはwith文が何をするかであるよう

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 

は今、ファイルは、閉じられます。

2

あなたがしていることは、あなたがしていることとまったく同じです。例外が発生すると、このセクションにジャンプします。

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

これ以降は何もないので、プログラムは終了します。

また、passも余分です。

+0

私はエラーを渡して、前方に移動しようとしています。 – Ank

+2

@Ankur 'pass'は「何もしない」ことを意味します。あなたのコードはそれなしで続行されます。問題は、あなたの 'except'ブロックの後に何もしないことです。 –

3

forループ内でtry/exceptを移動します。以下のよう : - あなたはあなたのプログラムを継続すべきかについて明確な計画を持っていない限り、これを行うことはありません

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) 
関連する問題