在使用Python 'with'语句时捕获异常 - 第二部分

16 投票
1 回答
5727 浏览
提问于 2025-04-16 13:04

这是对问题的进一步讨论,链接是 在使用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包裹起来,但我知道异常可能来自任何地方,根本不可能保护每一段代码。
总之,我只想在open('foo.txt', 'a')抛出异常时打印'error',所以我在这里想问,为什么下面的代码不是推荐的标准做法:

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

with f:
    #
    # some_code
    #

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

谢谢!

1 个回答

20

在编程中,很多时候我们会遇到一些问题,尤其是在使用不同的工具和语言时。比如,有些人可能在使用某个库或者框架时,发现它的功能和他们的需求不太匹配。这种情况下,大家通常会去网上查找解决方案,像StackOverflow这样的论坛就是一个很好的地方。

在这些论坛上,程序员们会分享他们的经验和解决方案,帮助其他人解决类似的问题。你可以看到很多人提问,也有很多人回答,大家互相帮助,形成一个很好的学习社区。

如果你在编程的过程中遇到困难,不妨去这些地方看看,可能会找到你需要的答案,或者得到一些启发。

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

撰写回答