2013-09-25 75 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:block之后依赖于文件内容,在IO错误之后继续是一个坏主意。让异常崩溃程序,以便您可以实际注意到并修复潜在的问题。 –

回答

25

把你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声明做什么。

2

你是代码正在做你正在告诉它做的。当你得到一个例外,它跳到这一节:

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

因为没有什么后,程序结束。

此外,该pass是多余的。

+0

我试图通过错误,并前进.. – Ank

+2

@Ankur'通过'意味着“什么都不做”。没有它你的代码将继续。问题是你的'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)