On Thu, Apr 16, 2015 at 08:35:14AM -0700, Ethan Furman wrote:
No more than any other block of code. There is nothing special about with blocks that go with exception handling [...]
I have to disagree: 'with' blocks are exactly a condensed try/finally, with the added capability of being able to suppress exceptions -- this makes them very special with respect to exception handling.
Yes, yes, that's a given that with statements encapsulate a finally clause. But that is missing the point. The proposal is not to add a finally clause to context managers, because they already have one. The proposal is to allow special syntax for the situation where you want a separate and independent finally. with spam(): try: blockA except Error: blockB finally: blockC The finally: blockC has nothing to do with the context manager's __exit__ method. We might as well be talking about this: while spam(): try: blockA except Error: blockB finally: blockC giving us syntactic sugar: # not a serious proposal while spam(): blockA except Error: blockB finally: blockC In fact, if I were a betting man, I'd venture a small wager that there are more while- or for-loops with try blocks inside them than with blocks. After all, the whole purpose of with statements is to avoid needing to write a try...finally! -- Steve