Ronald Oussoren via Python-ideas wrote:
> It is also possible to fix the particular issue by using another with
> statement, that is use:
>
> with contextlib.closing(read_multiple(…)) as chunks:
> for contents in chunks:
> …
>
> Automatically closing the generator at the end of the for loop would be
> nice, but getting the semantics right without breaking existing valid code
> is not trivial.
How about providing a decorator that turns the generator into a context
manager
def close_gen(f):
@contextmanager
@wraps(f)
def g(*args, **kw):
with closing(f(*args, **kw)) as h:
yield h
return g
@close_gen
def read_multiple(...):
...
?
A more radical approach would be to add __enter__ and __exit__ methods so
that for every generator function f
with f() as g:
pass
would call g.close()
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/