在Python中跳过迭代


159

我有一个循环,但是有可能在循环内引发异常。这当然会停止我的程序。为了防止这种情况,我捕获并处理了异常。但是,即使发生异常,其余迭代也会运行。我的except:子句中是否有关键字可以跳过当前迭代的其余部分?


4
没有看到已接受的答案(使用continue)如何捕获异常,但已被接受。因此,这个问题确实非常令人困惑。
S.Lott

@ S.Lott我不需要关键字来捕获异常,我只是在谈论总代码的一般流程。
The.Anti。09年

@ The.Anti.9。什么?首先,您说“我想捕捉例外”。现在,您说的是“我不需要关键字来捕获异常”。您能以某种方式澄清一下吗?
S.Lott

1
@ S.Lott。我不需要用关键字捕获异常,只需要尝试一下,除了代码中的语句即可....
The.Anti.9 2009年

1
我对问题进行了重新措辞,使其更符合所接受的答案。
jilles de wit

Answers:




17

像这样吗

for i in xrange( someBigNumber ):
    try:
        doSomethingThatMightFail()
    except SomeException, e:
        continue
    doSomethingWhenNothingFailed()

1
编辑使用继续而不是通过。
jilles de wit

16

继续示例:

number = 0

for number in range(10):
   number = number + 1

   if number == 5:
      continue    # continue here

   print('Number is ' + str(number))

print('Out of loop')

输出:

Number is 1
Number is 2
Number is 3
Number is 4
Number is 6 # Note: 5 is skipped!!
Number is 7
Number is 8
Number is 9
Number is 10
Out of loop


5

对于此特定用例,使用try..except..else是最干净的解决方案,else如果未引发异常,则将执行该子句。

注意:else子句必须跟在所有except子句之后

for i in iterator:
    try:
        # Do something.
    except:
        # Handle exception
    else:
        # Continue doing something
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.