15

这是使用 Python 'with' 语句时捕获异常的问题的延续。
我是个新手,我在 GNU/linux 上使用 Python 3.2 测试了以下代码。

在上述问题中,提出了与此类似的方法来从“with”语句中捕获异常:

try:
    with open('foo.txt', 'a'):
        #
        # some_code
        #
except IOError:
    print('error')

这让我想知道:如果 some_code 引发 IOError 而不捕获它会发生什么?它显然被外部的'except'语句所捕获,但这不是我真正想要的。
你可以说好的,只需用另一个 try-except 包装 some_code,等等,但我知道异常可能来自任何地方,不可能保护每一段代码。
总而言之,我只想打印 'error' 当且仅当 open('foo.txt', 'a') 引发异常,所以我在这里问为什么以下代码不是标准建议的方式这样做:

try:
    f = open('foo.txt', 'a')
except IOError:
    print('error')

with f:
    #
    # some_code
    #

#EDIT: 'else' statement is missing, see Pythoni's answer

谢谢!

4

1 回答 1

20
try:
    f = open('foo.txt', 'a')
except IOError:
    print('error')
else:
    with f:
        #
        # some_code
        #
于 2011-03-05T18:30:06.733 回答