-3

试图理解异常处理和 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] 的答案之一提到了使用 contextmanagers 获得这种效果的最 Pythonic 方式。但是上面的内容不是更清晰,更短,更pythonic吗?

[1]在使用 Python 'with' 语句时捕获异常

4

1 回答 1

4

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

except套件添加到with块中会使事情变得混乱;然后,责任将在上下文管理器和该块之间分配。

于 2013-05-01T13:52:31.447 回答