我正在阅读一些包含带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.html,else
子句在没有异常发生时执行,continue
继续循环的下一次迭代。但是,这不是Python会做的吗?
答案 0 :(得分:2)
在这种情况下,是的,else: continue
是多余的,可以省略。
但是如果else:
块之后有更多代码,那么它就不会多余,因为continue
语句会导致跳过该代码。这是程序员可能想要使用else: continue
的原因。例如,如果try:
块中的代码在没有异常的情况下完成,则不需要对循环中的当前项进行任何操作,但如果它确实引发异常,则程序需要捕获该异常并且做其他事后要清理它。清理代码可以放在else:
块之后。
答案 1 :(得分:1)
else
是try
子句语法的一部分。它与except
相反。这意味着“如果没有异常发生就这样做”。它与if-else
无关(同样,它有一个令人遗憾和令人困惑的名称。甚至python的一些创建者都提到了这一点,但现在改变它太难了)
不同之处在于,如果没有异常发生,else
中的代码仅执行 ,而后续代码将执行。在你提到的代码示例中,它什么也没做,因为循环仍会继续!