try语句中的else子句……有什么用处?

3

可能重复:
Python try-else

作为一个有Java背景的人,我不太明白else从句有什么用。

根据文档

它对于必须执行的代码很有用 如果try子句没有引发异常。

但是为什么不将代码放在try块后面呢?这似乎很重要...


3
这个问题已经在这个帖子中讨论过了:https://dev59.com/lHRA5IYBdhLWcg3wtwSe - Tendayi Mawushe
2
虽然许多人已经将此标记为上面问题的重复,但它似乎并没有真正解决OP在这里提出的区别,即在try块之后和else子句内部放置*之间的区别。 AndrewBC在下面的回答更好地回答了这一点。我在https://dev59.com/vknSa4cB1Zd3GeqPKQIT#22579805的回答也可能有用。 - jamadagni
3个回答

20
else子句之所以有用,是因为你可以确定try代码块中的代码执行成功。例如:
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print 'cannot open', arg
    else:
        print arg, 'has', len(f.readlines()), 'lines'
        f.close()

你可以安全地对f执行操作,因为你知道它的赋值成功了。如果代码只是在try ... except之后,你可能没有一个f


3

请考虑

try:
    a = 1/0
except ZeroDivisionError:
    print "Division by zero not allowed."
else:
    print "In this universe, division by zero is allowed."

如果你将第二个print放在try/except/else块之外,会发生什么?

这也比将其放在对a的赋值之后、在except之前更好——这相当于这个例子——因为它可以防止捕获不需要的异常。 - intuited

3

这段代码只会在没有异常被抛出时才执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接