3

我在这里阅读python 教程,但有一件事我不太明白。从文档:

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 块中未引发的异常。我不明白他们的意思。谁能举个例子?

4

1 回答 1

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'

于 2012-10-22T13:34:23.873 回答