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

Guido van Rossum gvanrossum at gmail.com
Fri May 13 17:41:50 CEST 2005


[Michael Hudson, after much thinking aloud]
> Oh, I guess the point is that with a decorated generator you can yield
> a value to be used as VAR, rather than just discarding the value as
> here.  Hmm.

Right. (I thought it was worth quoting this for the benefit of other
who went down the same trail but didn't quite make it to this
destination.)

> If things were fiddled such that sys.exc_info() return non-Nones when
> a finally clause is being executed because of an exception, we don't
> really need this wart, do we?

The problem is that sys.exc_info() almost always returns *something*
-- it's usually the last exception that was *ever* caught, except in
certain circumstances.

Phillip wrote on the same issue:
> I'm not sure the extra argument is a good idea; doesn't this introduce the
> same sort of invisible control flow as swallowing exceptions?  Also, since
> the block controller can't actually change the control flow, I'm having a
> hard time thinking of any actual use cases for this information.

The 'oke' argument is so that the author of transactional() can decide
what to do with a non-local goto: commit, rollback or hit the author
over the head with a big stick.

[Michael again]
> Compare and contrast:
> 
> @template
> def redirected_stdout(out):
>     save_stdout = sys.stdout
>     sys.stdout = out
> 
>     yield None
> 
>     sys.stdout = save_stdout
> 
> class redirected_stdout(object):
> 
>     def __init__(self, output):
>         self.output = output
> 
>     def __enter__(self):
>         self.save_stdout = sys.stdout
>         sys.stdout = self.output
> 
>     def __exit__(self):
>         sys.stdout = self.save_stdout
> 
> The former is shorter and contains less (well, no) 'self.'s, but I
> think I find the latter somewhat clearer.

Tastes differ. I think the generator wins; more so when there's more
state to remember.

[Michael quoting Guido]
> > The added complexity is caused by the need to separate VAR from EXPR
> > so that a generator can be used. I personally like this separation; I
> > actually like that the "anonymous block controller" is logically
> > separate from the variable bound by the construct.
> 
> Nevertheless, I think I actually like this argument!

(Repeated for the benefit of others.)

> > Straight up-or-down votes in the full senate are appreciated at this point.
> 
> +1 for the PEP 340 variant.

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


More information about the Python-Dev mailing list