Guido van Rossum wrote:
On 3/25/06, Nick Coghlan email@example.com wrote:
The kind of code I'm talking about would be an existing Python 2.4 generator that happens to do something like:
def gen(tasks): """yield the results of a bunch of task functions""" for task in tasks: try: yield (task, task()) except Exception, ex: yield ExceptionOccurred(task, ex)
This is purely hypothetical. It doesn't look like good style at all.
If you run such a generator on Python 2.5, but don't run it to completion before it is garbage collected, you will get an error message printed on stderr saying that an exception was ignored when this generator was cleaned up. If you use the new PEP 342 features to try to explicitly close it before it is garbage collected, you'll get the exception directly.
I think this is fine. The code breaks with the new yield semantics. But that's because the except clause was overly broad. It's easy to rewrite it like this, which is better style anyway because the scope of the try/except is limited.
try: value = (task, task()) except Exception, ex: value = ExceptionOccurred(task, ex) yield value
Works for me. Consider the issue dropped :)