44

特定の条件に一致するフォルダーからすべてのファイルを読み取ろうとしています。例外が発生すると、プログラムがクラッシュします。例外があっても続行しようとしていますが、それでも実行が停止します。

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

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
4

3 に答える 3

60

try/except構造をより内側に配置します。そうしないと、エラーが発生したときに、すべてのループが中断されます。

おそらく、最初の for ループの後に、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エラーがキャッチされると、ステートメントが行うことと同じように、ファイルが閉じられます。

于 2013-09-25T00:35:52.990 に答える
8

あなたのコードは、あなたが指示していることを正確に実行しています。例外が発生すると、次のセクションにジャンプします。

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

その後は何もないので、プログラムは終了します。

また、それpassは余計なことです。

于 2013-09-25T00:36:08.957 に答える