我正在尝试从符合特定条件的文件夹中读取所有文件。一旦我提出异常,我的程序崩溃了。我试图继续,即使有一个例外,但它仍然停止执行。
这是几秒后我得到的。
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 :(得分: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
是多余的。