为什么with语句不能有except子句

时间:2013-05-01 13:50:35

标签: python exception-handling with-statement

试图理解异常处理和with语句,我很好奇是否有人理解为什么python的设计是这样的,以下代码(遵循[1]中的“天真”问题)是非法的:

with open("a.txt") as f:
    print f.readlines()
except IOError:
    print 'Oops, failed to open the file'

当在适当的缩进级别出现“except”子句时,将“with”语句作为隐式“try”语句不是一个好主意吗?虽然“with”块是关于在块内发生异常时需要释放的资源,但资源分配始终是发生异常的沃土。处理接近发生地点的异常并不总是愚蠢的。

[1]的答案之一提到使用上下文管理器获得此效果的最pythonic方法。但上述不会更清晰,更短,甚至更加pythonic吗?

[1] Catching an exception while using a Python 'with' statement

1 个答案:

答案 0 :(得分:4)

上下文管理器传递异常,并且可以像except try组合中的except块那样处理该异常。

except套件添加到with区块会使问题混淆;然后,责任将在上下文管理器和该块之间分配。