2017-01-30 24 views
2

我正在閱讀一些源代碼,其中包含try .. except塊與else: continue語句。它有點類似如下:在Python中,else的用途是什麼:繼續try..except塊?

numerator = float(1) 
denominator = float(2) 

def do_divisions(numerator=numerator, denominator=denominator): 
    for _ in range(10): 
     try: 
      fraction = numerator/denominator 
      print "{numerator}/{denominator} = {fraction}".format(numerator=numerator, denominator=denominator, fraction=fraction) 
      denominator -= 1 
     except ZeroDivisionError: 
      print "You cannot divide by zero!" 
      return False 
     else: 
      continue 

result = do_divisions() 

我掙扎瞭解else: continue聲明做什麼。據我所知,從https://docs.python.org/2.7/tutorial/controlflow.htmlelse子句得到執行,如果沒有發生異常,並且continue繼續循環的下一次迭代。然而,這不是Python會做的嗎?

+3

這裏沒有必要。 – Maroun

+3

我認爲你是對的:'else:continue'在這裏沒有任何額外的功能。我認爲這個塊只是作爲一個**佔位符被插入**,以便在未發生異常的情況下未來添加的代碼被執行。 –

+1

如果'continue'是循環的最後一條指令,那麼顯然它必須是多餘的。與@SergiiShcherbak同意這可能是一個佔位符,儘管我認爲'pass'會是一個更好的佔位符 –

回答

2

在這種情況下,是的,else: continue是多餘的,它可以省略。

但是,如果在else:塊之後有更多的代碼,它將不會是多餘的,因爲continue語句會導致該代碼被跳過。這是程序員可能想要使用else: continue的原因。例如,如果try:塊中的代碼沒有異常完成,那麼對循環中的當前項目不需要做更多的事情,但是如果它確實引發異常,那麼程序需要捕獲該異常並執行其他操作之後清理。該清除代碼可以放在else:塊之後。

1

elsetry子句語法的一部分。這與except相反。它的意思是「如果沒有異常發生,就這樣做」。它與if-else無關(它也有一個不幸的和令人困惑的名字,甚至一些python的創作者也提到了這一點,但現在很難改變它)

不同之處在於代碼else執行只有如果沒有異常發生,而下面的代碼將執行不管。在你提到的代碼示例中,它什麼也不做,因爲循環會繼續!

+0

我意識到這種差異,但問題仍然是這個代碼示例中的else:continue? –

+0

對不起,我的錯誤,編輯了答案。它在你的情況下什麼都不做,反正會發生「繼續」。 –

相關問題