试图理解异常处理和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
答案 0 :(得分:4)
上下文管理器传递异常,并且可以像except
try
组合中的except
块那样处理该异常。
将except
套件添加到with
区块会使问题混淆;然后,责任将在上下文管理器和该块之间分配。