[Python-Dev] SF #1462485 - StopIteration raised in body of 'with' statement suppressed (original) (raw)
Delaney, Timothy (Tim) tdelaney at avaya.com
Sun Apr 2 23:47:22 CEST 2006
- Previous message: [Python-Dev] String formating in python 3000
- Next message: [Python-Dev] SF #1462485 - StopIteration raised in body of 'with' statement suppressed
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Discovered this while playing around with the 2.5 released end of last week.
Given:
@contextmanager def gen(): print 'enter' yield print 'exit'
with gen(): raise StopIteration('body')
I would expect to get the StopIteration exception raised. Instead it's suppressed by the @contextmanager decorator.
I think we should only suppress the exception if it's not the exception passed into gen.throw() i.e. it's raised by the generator. Does this sound like the correct behaviour? I've attached tests and a fix implementing this to the bug report.
I can't confirm right now (at work, need to install 2.5) but I'm also wondering what will happen if KeyboardInterrupt or SystemExit is raised from inside the generator when it's being closed via exit. I suspect a RuntimeError will be raised, whereas I think these should pass through.
Tim Delaney
- Previous message: [Python-Dev] String formating in python 3000
- Next message: [Python-Dev] SF #1462485 - StopIteration raised in body of 'with' statement suppressed
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]