On May 9, 2005, at 21:58, Guido van Rossum wrote: > Apologies if this has been discovered and rejected already; I've had > to skip most of the discussions but this though won't leave my head...
Skimming rather than skipping all of the discussion burned most of my py-dev time, and it was just skimming, but I don't remember such rejections. > But what if we changed the translation slightly so that VAR gets > assigned to value of the __enter__() call: > > abc = EXPR > VAR = abc.__enter__() # I don't see why it should be > optional > try: > BLOCK > finally: > abc.__exit__() > > Now it would make more sense to change the syntax to > > with EXPR as VAR: > BLOCK > > and we have Phillip Eby's proposal. The advantage of this is that you I like this. The only aspect of other proposals that I would sorely miss here, would be the inability for abc.__exit__ to deal with exceptions raised in BLOCK (or, even better, a separate specialmethod on abc called in lieu of __exit__ upon exceptions). Or am I missing something, and would this give a way within abc.__exit__ to examine and possibly ``unraise'' such an exception...? > can write a relatively straightforward decorator, call it > @with_template, that endows a generator with the __enter__ and > __exit__ methods, so you can write all the examples (except > auto_retry(), which was there mostly to make a point) from PEP 340 > like this: > > @with_template > def opening(filename, mode="r"): > f = open(filename, mode) > yield f > f.close() > > and so on. (Note the absence of a try/finally block in the generator > -- the try/finally is guaranteed by the with-statement but not by the > generator framework.) I must be thick this morning, because this relatively straightforward decorator isn't immediately obvious to me -- care to show me how with_template gets coded? Alex _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com