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 回答
11

在 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)
于 2013-09-25T00:40:14.937 回答
8

你的代码正在做你告诉它做的事情。当您遇到异常时,它会跳转到此部分:

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

由于之后什么都没有,程序就结束了。

而且,这pass是多余的。

于 2013-09-25T00:36:08.957 回答