我最近偶然發現了Python在不同複合語句中處理else子句的方式看起來不一致。由於Python設計得非常好,我確信有一個很好的解釋,但我想不起來。爲什麼其他語句在for/while語句中的行爲與if/try語句相反?
考慮以下幾點:
if condition:
do_something()
else:
do_something_else()
這裏,do_something_else()
只有當condition
是假的,按預期執行。
同樣,在
try:
do_something()
except someException:
pass:
else:
do_something_else()
finally:
cleanup()
do_something_else()
如果沒有異常發生時,纔會執行。
但是在for或while循環中,總是執行else子句,不管for/while block
的內容是否已經執行。
for i in some_iterator:
print(i)
else:
print("Iterator is empty!")
將始終打印 「的Iterator是空的!」,無論我說some_iterator = []
或some_iterator = [1,2,3]
。在while-else
子句中有相同的行爲。在我看來,在這些情況下,else
的行爲更像finally
。我忽略了什麼?
我很驚訝Python允許語法。在大多數其他語言中,else僅限於與if或switch語句一起使用。 For-loops和try-statements可能控制流,但它們不像if語句那樣有條件,所以-else在它們中沒有地位。 – shuckster 2009-10-16 07:03:57
對於它的價值,最近在python-ideas列表上進行了很長時間的關於for/else等的討論,總結如下:http://article.gmane.org/gmane.comp.python.ideas/6131 /。 Guido自己承認對此有第二個想法:http://article.gmane.org/gmane.comp.python.ideas/6133/ – 2009-10-16 08:17:29
感謝這些鏈接! – 2009-10-16 08:40:53