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

M.-A. Lemburg mal at egenix.com
Fri May 10 21:28:48 CEST 2013


On 10.05.2013 21:16, Antoine Pitrou 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.
> 
> However, in your case, foo('a' 'b') could raise a SyntaxWarning, since
> the "continuation" is on the same line.

Nice idea.

I mostly use this feature when writing multi-line or too-long-to-fit-on-
one-editor-line string literals:

s = ('abc\n'
     'def\n'
     'ghi\n')
t = ('some long paragraph spanning multiple lines in an editor, '
     'without newlines')

This looks and works much better than triple-quoted string literals,
esp. when defining such string literals in indented code.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, May 10 2013)
>>> Python Projects, Consulting and Support ...   http://www.egenix.com/
>>> mxODBC.Zope/Plone.Database.Adapter ...       http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________
2013-05-07: Released mxODBC Zope DA 2.1.2 ...     http://egenix.com/go46
2013-05-06: Released mxODBC 3.2.3 ...             http://egenix.com/go45

::::: Try our mxODBC.Connect Python Database Interface for free ! ::::::

   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               http://www.egenix.com/company/contact/



More information about the Python-ideas mailing list