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

Michael Hudson mwh at python.net
Sat May 14 13:30:34 CEST 2005


Guido van Rossum <gvanrossum at gmail.com> writes:

> [Michael Hudson, after much thinking aloud]

Yeah, sorry about that :)

>> 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.

Yeah, OK.  I'll stop claiming to understand sys.exc_info() apart from
the simple cases.

> [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.

Certainly when there's more state to manage, yes.  But both will be
possible, so, *shrug*.  It's not a big deal.

> [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.)

I guess this means PEP 310 can be retracted.

Finally, from PEP 343 rev 1.7:

        exc = ()  # Or (None, None, None) ?

The latter, please.

Cheers,
mwh

-- 
    . <- the point                                your article -> .
    |------------------------- a long way ------------------------|
                                       -- Christophe Rhodes, ucam.chat


More information about the Python-Dev mailing list