获得例外的可能性,然后只是吞下,因为哟我使用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
和return
也没有意义。当前的迭代也会中止,唯一的差异是 ,您现在只需要一次迭代即可完成。
所以问题“为什么continue
不允许在finally
?”也可以被问为“为什么允许break
和return
?”。
也许是因为它在这一点上有意义吗? 这是开发者的决定,现在它是这样吗?当然,这也可能是实现者的懒惰,但是谁知道,也许他们有一些想法,或许在另一个版本的Python中,它会让更多的其他方式感觉到它呢?
想法是,这里的例子只是极端的。你不只是写这样的代码,是吗?无论如何,在finally
块中肯定会有一些 逻辑来说明何时break/return/continue
,而不仅仅是这样。因此,应该允许在finally
之内的恕我直言continue
,因为如果这是我所需要的,我将不用诉诸于代码解决方法来解决此限制(例如,在Python的哲学中“我们都是同意这里的成年人“)。
看起来只是纯粹的懒惰? http://www.gossamer-threads.com/lists/python/dev/484210 –
@Mike Christensen:我也发现这个线程,但是文档说“继续可能只会出现在语法上嵌套在for或while循环中,但不会嵌套在函数或类定义**或该循环中的finally子句**中。那么这是懒惰还是故意的,后来需要改变? ...像Python中的很多东西... – ElenaT
你读过整个线程吗? - 有一些有趣的信息可以说明它会在finally块中“继续”,以及可能出现的各种问题。值得阅读。 –