因为使用 a 而引发异常然后被吞掉的可能性是一个强有力的论据,但是当您使用or代替continue
时,异常也会被吞掉。break
return
例如,这有效并且异常被吞没:
for i in range(10):
print i
try:
raise Exception
finally:
break
print i # not gonna happen
这再次没有错误(在函数中)并且异常也被吞没:
for i in range(10):
print i
try:
raise Exception
finally:
return
print i # not gonna happen
那么为什么在一个块中允许break
并且被允许,不管有没有可能引发的错误,但不是?return
finally
continue
您还可以考虑问题中以下因素的组合:
finally
总是被执行;
continue
“中止”当前迭代。
这意味着在每个循环中,由于finally
总是执行,你总是会有一个continue
女巫基本上说“中止当前迭代”,“中止当前迭代”,“中止当前迭代”......女巫真的没有任何意义. break
但是使用and也没有意义return
。当前迭代也被中止,唯一的区别是您现在只得到一个迭代。
所以这个问题“为什么continue
不允许在 a 中finally
?” 也可以问为“为什么是break
和return
允许的?”。
也许是因为那时不这样做是有道理的?这是开发人员的决定,现在是这样吗?当然,这也可能是实现者的懒惰,但谁知道呢,也许他们有什么想法,也许在另一个版本的 Python 中,以另一种方式拥有它会更有意义?
这个想法是,这里的例子只是极端的。你不只是写那样的代码,对吗?块中肯定有一些逻辑finally
来说明什么时候去break/return/continue
,无论如何,而不是像那样直截了当。因此,恕我直言,应该允许continue
在 a中使用,因为如果我需要的话,我会很感激使用in编写一个干净的代码,而不是针对这个限制诉诸代码解决方法(即在 Python 的哲学中“我们都是在这里同意的成年人” )。finally
continue
finally