[Python-Dev] Utopian String Interpolation

M.-A. Lemburg mal@lemburg.com
Thu, 17 Jan 2002 11:11:08 +0100


Paul Prescod wrote:
> 
> "M.-A. Lemburg" wrote:
> >
> >...
> > > Embrace the __future__!
> >
> > -1.
> >
> > Too dangerous.
> 
> It isn't dangerous. That's precisely what __future__ is for! It is no
> more dangerous than any other feature that uses __future__.

It is. Currently Python strings are just that: immutable strings.
Now, you suddenly add dynamics to then. This will cause nightmares
in terms of security. Note that Python hasn't really had a need
for Perl's "taint" because of this. I wouldn't want to see that
change in any way.

If you really need this, either use a string prefix or call a
specific function which implements string interpolation. At
least then things are obvious and explicit.
 
> > ... If string interpolation makes it into the core,
> > then please use a *new* construct. '\$' is currently interpreted
> > as '\$' and this should not be changed (heck, just think what would
> > happen to all the shell script snippets encoded in Python strings).
> 
> No, this should be changed. 

Huh ? I bet RedHat and thousands of sysadmins who have switched
from shell or Perl to Python would have strong objections.

> Completely ignoring string interpolation, I
> am strongly in favour of changing the behaviour of the literal string
> parser so that unknown \-combinations raise a SyntaxError. If you don't
> want a backslash to be interpreted as an escape sequence start, you
> should use a raw string.
> 
> The Python documentation and grammar already says:
> 
> escapeseq  ::=  "\" <any ASCII character>
> 
> The documentation says:
> 
> "Unlike Standard  , all unrecognized escape sequences are left in the
> string unchanged, i.e., the backslash is left in the string. (This
> behavior is useful when debugging: if an escape sequence is mistyped,
> the resulting output is more easily recognized as broken.)"
> 
> That's a weird thing to say. What could be more helpful for debugging
> than a good old SyntaxError???

If there's nothing wrong with the escape why raise a 
SyntaxError ?
 
> > BTW, why don't you wrap all this interpolation stuff into
> > a module and then call a function to have it apply all the
> > magic you want.
> 
> We've been through that in this discussion already. In fact, that's how
> the discussion started.

I've jumped in at a rather late point. Perhaps you ought to rewind
the discussion then and start discussing in a different 
direction :-) E.g. about the syntax to be used in the 
interpolation and where, when and in which context to 
evaluate the strings.

There are so many options that I can't really see any benefit
from chosing only one and hard-coding it into the language.
Other users will have other requirement which are likely
not to combine well with the one implementation you have in
mind.

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
______________________________________________________________________
Company & Consulting:                           http://www.egenix.com/
Python Software:                   http://www.egenix.com/files/python/