使用多次尝试:除了处理错误外,其他方法均不起作用

时间:2018-10-31 14:52:28

标签: python-2.7 try-catch continue

我有一个要遍历的文件列表:

 condition = True
 list = ['file1', 'file2', 'file3']
   for item in list:
     if condition == True      
        union = <insert process>
      ....a bunch of other stuff.....

让我们说代码在file1和file3上工作正常,但是当到达file2时,将引发IO错误。我想做的是在IOError抛出时绕过file2,返回到列表中的下一项。我想使用try: except方法来执行此操作,但似乎无法正确执行。注意:我在代码开头有一个整体try-catch。我不确定是否会干扰仅在代码的特定部分添加第二个代码。

try:
    try:
      condition = True
      list = ['file1', 'file2', 'file3']
      for item in list:
        if condition == True      
          union = <insert process>
      ....a bunch of other stuff.....

    except IOError:
      continue
    .....a bunch more stuff.....
except Exception as e:
    logfile.write(e.message)
    logfile.close()
    exit()

“通过”和“继续”之间有什么区别,为什么上面的代码不起作用?我需要在IOError部分添加更多具体信息吗?

1 个答案:

答案 0 :(得分:1)

pass continue 有什么区别?

pass是一个空操作,它告诉python不执行任何操作并转到下一条指令。

continue是一个循环操作,它告诉python忽略在该循环迭代中剩下的任何其他代码,并像进入循环块末尾一样简单地转到下一个迭代。 >

例如:

def foo():
    for i in range(10):
        if i == 5:
           pass
        print(i)

def bar():
    for i in range(10):
        if i == 5:
           continue
        print(i)

第一个将打印0、1、2、3、4, 5 ,6、7、8、9,但是第二个将打印0、1、2、3, 4,6 ,7、8、9,因为continue语句将导致python跳回到起始位置,而不继续执行print指令,而pass将继续正常执行循环。

为什么上面的代码不起作用?

您的代码存在的问题是try块位于循环外部,一旦循环内部发生异常,则循环在该点终止并跳至循环外部的except块。要解决此问题,只需将tryexcept块移至for循环中即可:

try:
  condition = True
  list = ['file1', 'file2', 'file3']
  for item in list:
     try:
        # open the file 'item' somewhere here
        if condition == True      
            union = <insert process>
        ....a bunch of other stuff.....

     except IOError:
         # this will now jump back to for item in list: and go to the next item
         continue
    .....a bunch more stuff.....
except Exception as e:
   logfile.write(e.message)
   logfile.close()
   exit()