Kent Johnson wrote: > Ricardo Aráoz wrote: >> Kent Johnson wrote: >>> from contextlib import nested >>> with nested(open_file(self.direcciones), open_file(self.excluidas)) >>> as (fIncl, fExcl): >>> >> Nice! How would you add exception reporting to this? > > I don't have a good answer to that, that's why I didn't propose it > originally. You could use > > try: > with nested(open_file(self.direcciones), open_file(self.excluidas)) > as (fIncl, fExcl): > try: > do_something_with(fIncl, fExcl) > except: > # handle exceptions from do_something_with() > except: > pass # We already logged exceptions from the open_file calls > > You could omit the inner try/except if you are sure that > do_something_with() won't raise an exception, but it's pretty hard to be > sure of that unless it wraps its contents already. > > Looking at PEP 343, it's pretty clear ;-) that exceptions raised by > open_file() will just be passed out of the with statement. Look at the > pseudo-code in the section "Specification: The 'with' Statement". The > exception is raised in the very first line - mgr = (EXPR) - when > open_file() is called. >
Yes, I can see that. I don't like it, too much hair splitting to get something that is easily programmed the traditional way. I don't want to be thinking about if the exception will or will not be passed out of the with statement, and I CERTAINLY don't want the person who will be modifying my code to have to think about those things. I'll stay with the old way, easier, clearer and almost the same length, I fail to see what I would win by coding this way. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor