[Python-Dev] Re: Re: Update PEP 292

Fernando Perez fperez528 at yahoo.com
Wed Aug 11 16:54:27 CEST 2004


Barry Warsaw wrote:

> On Wed, 2004-08-11 at 08:06, Fernando Perez wrote:
> 
>> If I understood things correctly, this proposal will not allow the evaluation
>> of
>> any kind of expression, including attributes.  With the existing
>> interpolation system, the following happens:
>> 
>> In [2]: print 'sys.platform is: %(sys.platform)s' % locals()
>> ---------------------------------------------------------------------------
>> KeyError                                  Traceback (most recent call last)
>> 
>> ?
>> 
>> KeyError: sys.platform
> 
> You don't mean the 'existing' interpolation system, because this
> obviously doesn't work in Python today, although with a fancy enough
> implementation of 'locals()', it could.  That actually doesn't change
> much with PEP 292.  I specifically designed it so that you could
> subclass from template, so as to accept the extended placeholder syntax
> (i.e. dots), and then implement a mapping-like class to do the lookups
> in any namespace you want.  In fact, my earlier implementation contained
> such a class, but it was deemed too complex to win the name 'simpler' so
> it was left out of the library.  It's a trivial amount of code and my
> own personal use case has a need for such a feature.

I guess my post wasn't worded too clearly.  I did mean existing, in the sense
that the error above occurs with current python (it's cut-and-paste from python
2.2).  My point was precisely to illustrate this failure with a simple example,
to then ask whether the new scheme could be made, _as shipped_, to accept this
kind of expansion:

print template('sys.platform is: $sys.platform') % locals()

It may be trivial to extend pep-292 for this, but not having to do it in every
small utility you write/ship would be very useful, IMHO.  If there are no
technical reasons to prevent it, is the 'too complex' argument really that
strong (especially since you state it's a trivial amount of code)?

I hope this clarifies better my question.

Regards,

f



More information about the Python-Dev mailing list