Nicolas Fleury wrote: > I prefer the optional-indentation syntax. The reason is simple (see my > discussion with Andrew), most of the time the indentation is useless, > even if you don't have multiple with-statements. So in my day-to-day > work, I would prefer to write: > > def getFirstLine(filename): > with opening(filename) as file > return file.readline() > > than: > > def getFirstLine(filename): > with opening(filename) as file: > return file.readline()
One of the beauties of PEP 343 is that it can be explained simply in terms of current Python syntax. The expression: with EXPR as VAR: BLOCK is equivalent to: abc = EXPR exc = (None, None, None) VAR = abc.__enter__() try: try: BLOCK except: exc = sys.exc_info() raise finally: abc.__exit__(*exc) Can you do the same thing for your proposal? As I understand it you want some sort of implicitly-defined BLOCK that starts the line after the with statement and runs to the end of the current block... Do you think the benefit of less indentation outweighs the added complexity of explaining the construct? I still can't think of a good way of explaining the semantics you want. If you could provide an explanation that's simple and as explicit as Guido's explanation in PEP 343, I think that would help your case a lot. STeVe P.S. I think it's a great sign that people are mainly squabbling about syntax here. More likely than not, Guido's already made his mind up about the syntax. So, since no one seems to have any real problems with the semantics, I'm hopeful that we'll get a direct implementation of PEP 343 in the next Python release. =) -- http://mail.python.org/mailman/listinfo/python-list