[Python-Dev] PEP 343 - multiple context managers in one statement (original) (raw)

Paul Moore p.f.moore at gmail.com
Tue Oct 25 22:40:30 CEST 2005


I have a deep suspicion that this has been done to death already, but my searching ability isn't up to finding the reference. So I'll simply ask the question, and not offer a long discussion:

Has the option of letting the with statement admit multiple context managers been considered (and presumably rejected)?

I'm thinking of

with expr1, expr2, expr3:
    # whatever

In some ways, this doesn't even need an extension to the PEP - giving tuples suitable enter and exit methods would do it. Or, I suppose a user-defined manager which combined a list of others:

class combining:
    def __init__(*mgrs):
        self.mgrs = mgrs
    def __with__(self):
        return self
    def __enter__(self):
        return tuple(mgr.__enter__() for mgr in self.mgrs)
    def __exit__(self, type, value, tb):
        # first in, last out
        for mgr in reversed(self.mgrs):
            mgr.__exit__(type, value, tb)

Would that be worth using as an example in the PEP?

Sorry - it got a bit long anyway...

Paul.

PS The signature of with in example 4 in the PEP is wrong - it has an incorrect "lock" parameter.



More information about the Python-Dev mailing list