[Python-ideas] Implicit string literal concatenation considered harmful?

Antoine Pitrou solipsis at pitrou.net
Fri May 10 21:37:07 CEST 2013


On Fri, 10 May 2013 12:30:15 -0700
Guido van Rossum <guido at python.org> wrote:
> On Fri, May 10, 2013 at 12:16 PM, Antoine Pitrou <solipsis at pitrou.net> wrote:
> > On Fri, 10 May 2013 11:48:51 -0700
> > Guido van Rossum <guido at python.org> wrote:
> >> I just spent a few minutes staring at a bug caused by a missing comma
> >> -- I got a mysterious argument count error because instead of foo('a',
> >> 'b') I had written foo('a' 'b').
> >>
> >> This is a fairly common mistake, and IIRC at Google we even had a lint
> >> rule against this (there was also a Python dialect used for some
> >> specific purpose where this was explicitly forbidden).
> >>
> >> Now, with modern compiler technology, we can (and in fact do) evaluate
> >> compile-time string literal concatenation with the '+' operator, so
> >> there's really no reason to support 'a' 'b' any more. (The reason was
> >> always rather flimsy; I copied it from C but the reason why it's
> >> needed there doesn't really apply to Python, as it is mostly useful
> >> inside macros.)
> >>
> >> Would it be reasonable to start deprecating this and eventually remove
> >> it from the language?
> >
> > I'm rather -1. It's quite convenient and I don't want to add some '+'
> > signs everywhere I use it. I'm sure many people also have long string
> > literals out there and will have to endure the pain of a dull task to
> > "fix" their code.
> 
> Fixing this is an easy task for lib2to3 though.

Assuming someone does it :-)

You may also have to "fix" other software. For example, I don't know if
gettext supports fetching literals from triple-quoted Python strings,
while it works with string continuations.

As for "+", saying it is a replacement is a bit simplified, because
the syntax definition (for method calls) or operator precedence (for
e.g. %-formatting) may force you to add parentheses.

Regards

Antoine.





More information about the Python-ideas mailing list