restriction on sum: intentional bug?

Dave Angel davea at ieee.org
Sun Oct 18 06:30:09 EDT 2009


Dieter Maurer wrote:
> Christian Heimes <lists at cheimes.de> writes on Fri, 16 Oct 2009 17:58:29 +0200:
>   
>> Alan G Isaac schrieb:
>>     
>>> I expected this to be fixed in Python 3:
>>>
>>>       
>>>>>> sum(['ab','cd'],'')
>>>>>>             
>>> Traceback (most recent call last):
>>>    File "<stdin>", line 1, in <module>
>>> TypeError: sum() can't sum strings [use ''.join(seq) instead]
>>>
>>> Of course it is not a good way to join strings,
>>> but it should work, should it not?  Naturally,
>>>       
>> It's not a bug. sum() doesn't work on strings deliberately. ''.join()
>> *is* the right and good way to concatenate strings.
>>     
>
> Apparently, "sum" special cases 'str' in order to teach people to use "join".
> It would have been as much work and much more friendly, to just use "join"
> internally to implement "sum" when this is possible.
>
> Dieter
>
>
>   

Earlier, I would have agreed with you.  I assumed that this could be 
done invisibly, with the only difference being performance.  But you 
can't know whether join will do the trick without error till you know 
that all the items are strings or Unicode strings.  And you can't check 
that without going through the entire iterator.  At that point it's too 
late to change your mind, as you can't back up an iterator.  So the user 
who supplies a list with mixed strings and other stuff will get an 
unexpected error, one that join generates.

To put it simply, I'd say that sum() should not dispatch to join() 
unless it could be sure that no errors might result.

DaveA




More information about the Python-list mailing list