On Fri, Jan 30, 2015 at 1:28 PM, Sturla Molden <sturla.mol...@gmail.com> wrote: > in Python. It actually corresponds to > > with Foo() as bar: > <suite>
The problem with with statements is that they only handle the case of RAII with stack allocated variables, and can't handle transfer of ownership cleanly. Consider the case of a function that opens a file and returns it: def myfunction(name, stuff): f = open(name) f.seek(stuff) # or whatever return f def blahblah(): with myfunction('hello', 12) as f: .... This code is wrong, because if an error occurs during seek in myfunction, the file is leaked. The correct myfunction is as follows: def myfunction(name, stuff) f = open(name) try: f.seek(stuff) except: f.close() raise Or whatever. (I would love a close_on_error context manager, BTW.) With RAII, the equivalent C++ looks nearly exactly like the original (bad) Python approach, except it uses unique_ptr to store the file, and isn't broken. ("Modern") C++ makes this easy to get right. But then, this isn't the common case. -- Devin -- https://mail.python.org/mailman/listinfo/python-list