
On 10.05.2013 21:30, Guido van Rossum wrote:
On Fri, May 10, 2013 at 12:16 PM, Antoine Pitrou <solipsis@pitrou.net> wrote:
On Fri, 10 May 2013 11:48:51 -0700 Guido van Rossum <guido@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.
Think about code written to work in Python 2 and 3. Python 2 would have to get the compile-time concatenation as well, to prevent slow-downs due to run-time concatenation. And there would have to be a tool to add the '+' signs and parens to the Python 2 code... s = ('my name is %s and ' 'I live on %s street' % ('foo', 'bar')) --> s = ('my name is %s and ' + 'I live on %s street' % ('foo', 'bar')) results in: Traceback (most recent call last): File "<stdin>", line 2, in <module> TypeError: not all arguments converted during string formatting The second line is also a good example of how removing the feature would introduce a new difficult to see error :-) IMO, the issue is a task for an editor or a lint tool to highlight, not the Python compiler, IMO. -- 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/