2010-10-22 74 views
3

可能重复:
Python try-elseelse子句...它是什么好

从Java正在添加背景,我不太得到else条款是什么对你有好处。

按照文档

这是一个必须如果try子句不 引发异常被 执行的代码是有用的。

但是,为什么不把代码放在try块后?看来我在想念着一些重要的东西在这里...

+3

此问题已在此问题中讨论过:http://stackoverflow.com/questions/855759/python-try-else – 2010-10-22 11:31:14

+2

虽然很多人都将此标记为上述问题的一个副本,但它看起来并不真实以解决OP在这里所询问的区别,即在* try块之后和else子句之间放*。 AndrewBC的回复下面的答案好多了。我的贡献http://stackoverflow.com/a/22579805/1503120也可能有用。 – jamadagni 2014-03-22 18:11:26

回答

10

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安全地进行操作,因为你知道它的分配成功了。如果代码只是在尝试后......除了,你可能没有f

3

考虑一下,如果你把第二printtry/except/else

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

会发生什么?

+0

这比将'a'分配给''''之前'比'这个例子等效的'except'更好,因为它可以防止捕获不需要的异常。 – intuited 2010-10-22 12:09:40

2

这是代码要执行只有时没有出现异常。