[Python-ideas] use context managers for new-style "for" statement

Bruce Frederiksen dangyogi at gmail.com
Fri Feb 20 23:41:33 CET 2009


An idea occurred to me about another way to achieve "new-style" for 
statements that finalize generators properly:

1.  Modify for statements to accept context mangers in addition to 
iterables.  If it gets a context manager, it calls __exit__ when the 
loop terminates for any reason.  Otherwise, it does what it does now.

2.  Add an optional __throw__ method to context managers.  If the 
context manager has a __throw__ method, the for statement forwards 
uncaught exceptions within its body to the context manager.

Thus, you can use:

    for i in closing(gen(x)):

if you want the generator closed automatically.

This would also work for files:

    for line in open(filename):

We might also add a new context manager to contextlib to do both the 
close and the throw.  Maybe call it throwing_to?

    for i in throwing_to(gen(x)):

I would think that throwing_to would also do what closing does.

This somewhat simplifies the common "with closing"/"for" pattern as well 
as adds support for the new close/throw generator methods without any 
new syntax.

Comments?

-bruce frederiksen



More information about the Python-ideas mailing list