[Python-Dev] Merging PEP 310 and PEP 340-redux?

Guido van Rossum gvanrossum at gmail.com
Thu May 12 16:50:29 CEST 2005


A quick response to various small issues...

- Benji York proposes that file and lock objects (for example) could
  have suitable __enter__ and __exit__ methods (__enter__ would have
  to return self).  Right!

- Greg Ewing (I believe) wants 'do' instead of 'with' for the
  keyword.  I think I like 'with' better, especially combining it with
  Benji's proposal.  IMO this reads better with 'with' than with 'do':

    with open("/etc/passwd") as f:
        for line in f:
            ...

- Steve Bethard has this example:

    stmt = EXPR1
    VAR1 = stmt.__enter__()
    exc = () # or (None, None, None) if you prefer
    try:
	try:
	    BLOCK1
	except:
	    exc = sys.exc_info()
    finally:
	if stmt.__exit__(*exc) is not None:
	    raise exc[0], exc[1], exc[2]

  but he seems to forget that finally *always* re-raises the
  exception.  Anyway, I still don't care for the use case; rather than
  fixing the coding bug, your time would be better spent arguing why
  this functionality can't be missed.

- Eric Nieuwland asks if the VAR is still optional.  Yes, it is (this
  is implicit in the entire set of threads).

- Paul Moore wants the generator templates to explicitly contain
  try/finally (or try/except, depending on the use case).  That's much
  more work though (passing exceptions into a generator is a new
  feature) and is not necessary to get the "redux" version.

- Ka-ping Yee thinks we need separate entry points for the exceptional
  and the normal termination case.  I disagree; this would end up in
  unnecessary duplication of code (or boilerplate to equate the two
  methods) in most cases.  The whole *point* is that finally gets to
  do its clean-up act regardless of whether an exception is being
  processed or not.  The varargs signature to __exit__ was just me
  being lazy instead of typing

    def __exit__(self, t=None, v=None, tb=None): ...

- Nick is still peddling his much more complicated variant.  I
  recommend that he focuses on arguing use cases rather than semantic
  subtleties, or else it won't get any traction (at least not with me
  :-).

--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list