在Python中,else的目的是什么:在try..except块中继续?

时间:2017-01-30 11:15:58

标签: python

我正在阅读一些包含带try语句的except .. else: continue块的源代码。它有点类似于以下内容:

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会做的吗?

2 个答案:

答案 0 :(得分:2)

在这种情况下,是的,else: continue是多余的,可以省略。

但是如果else:块之后有更多代码,那么它就不会多余,因为continue语句会导致跳过该代码。这是程序员可能想要使用else: continue的原因。例如,如果try:块中的代码在没有异常的情况下完成,则不需要对循环中的当前项进行任何操作,但如果它确实引发异常,则程序需要捕获该异常并且做其他事后要清理它。清理代码可以放在else:块之后。

答案 1 :(得分:1)

elsetry子句语法的一部分。它与except相反。这意味着“如果没有异常发生就这样做”。它与if-else无关(同样,它有一个令人遗憾和令人困惑的名称。甚至python的一些创建者都提到了这一点,但现在改变它太难了)

不同之处在于,如果没有异常发生,else中的代码仅执行 ,而后续代码将执行。在你提到的代码示例中,它什么也没做,因为循环仍会继续!