brasse wrote: > Hello! > > I have been running in to some problems when using > contextlib.nested(). My problem arises when using code similar to > this: > > from __future__ import with_statement > > from contextlib import nested > > class Foo(object): > > def __init__(self, tag, fail=False): > print 'ctor', tag > self.tag = tag > if fail: > raise Exception() > > def __enter__(self): > print '__enter__', self.tag > return self > > def __exit__(self, *args): > print '__exit__', self.tag > > with nested(Foo('a'), Foo('b', True)) as (a, b): > print a.tag > print b.tag > > Here the construction of b fails which in turn means that the > contextmanager fails to be created leaving me a constructed object (a) > that needs to be deconstructed in some way. I realize that nested() is > in a tight spot here to do anything about it since it doesn't exist. > This behavior makes it hard for me to use the with statement (using > nested()) the way I want. > > Has anyone else been running in to this? Any tips on how to handle > multiple resources?
I don't fully understand this. Why is in need to be deconstructed? Sure, the object is created, but whatever is actually done on initialization which is non-trivial should of course to the __enter__-method - which isn't called. So, a falls out of a scope & gets GC'ed. What else do you expect to happen? Diez -- http://mail.python.org/mailman/listinfo/python-list