獲得例外的可能性,然後只是吞下,因爲喲我使用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塊中「繼續」,以及可能出現的各種問題。值得閱讀。 –