2017-01-30 55 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

对不起,我的错误,编辑了答案。它在你的情况下什么都不做,反正会发生“继续”。 –

相关问题