异常后使python代码继续

时间:2013-09-25 00:34:30

标签: 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

3 个答案:

答案 0 :(得分:34)

将您的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语句就是这样。

答案 1 :(得分:5)

在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)

答案 2 :(得分:4)

你的代码正在做你正在告诉它的事情。当你得到一个例外时,它会跳到这一部分:

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

由于此后没有任何内容,程序结束。

此外,pass是多余的。