2012-10-22 24 views
3

我正在阅读python tutorial,这里有一件事情我不太明白。从文档:from python documentation about 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() 

从文档的解释:

使用else子句是不是增加额外的代码try子句,因为它避免了意外捕获异常,这不是更好代码被try ... except语句保护。

我的问题是它如何防止意外捕获在此try块中未引发的异常。我不明白他们的意思。任何人都可以举个例子吗?你可以尝试

+0

这是我正在阅读的文档的链接:http://docs.python.org/tutorial/errors.html#handling-exceptions –

回答

2

一种可能的替代方法是这样的:

for arg in sys.argv[1:]: 
    try: 
     f = open(arg, 'r') 
     print arg, 'has', len(f.readlines()), 'lines' 
     f.close() 
    except IOError: 
     print 'cannot open', arg 

这里,如果有在异常f.readlines()f.close()那么它将被except块被抓住,你会得到错误信息'cannot open'这是错的。

+0

谢谢!我接受这个答案。但你还请再举一个例子吗? :) –

+1

我只是添加了一条评论,因为你在我的答案前几秒钟发布了关于发布的例子,你必须看到它像“尝试这样做,如果失败了,引发异常ELSE继续。它只是将有风险的代码与其他误导性部分隔离开来 –