Bug or feature? 'abc'.split('') rejects empty separator

Bengt Richter bokr at oz.net
Mon Feb 11 00:33:55 EST 2002

On Sun, 10 Feb 2002 18:05:01 -0500, "Tim Peters" <tim.one at home.com> wrote:

>[Bengt Richter]
>>  >>> 'abc'.split('')
>>  Traceback (most recent call last):
>>    File "<stdin>", line 1, in ?
>>  ValueError: empty separator
>> Wouldn't it make sense to return list('abc') ?
>[Neil Schemenauer]
>> It would also make sense to return ['a', 'b', 'c'].
>Well, that's what list('abc') does return, so you're in violent agreement.
>However, this still stands:
>> Since it's not obvious what you want Python raises an error.
>Indeed, my first thought was "OK, if it has to return *something*, then
>since we're asking it to split on nothing, it shouldn't split at all:
>    ['abc']
>is what it should return."  That's also compatible with
>    ''.join[['abc']] == 'abc'
Of course you mean
 >>> ''.join(['abc'])

This option is also compatible with what re does:
 >>> import re
 >>> re.split('','abc')
(Note absence of complaint ;-)

>People who think '' should split "everywhere" instead of "nowhere" should
>really be arguing for 'abc'.split('') to return
>    ['', 'a', 'b', 'c', '']
>instead, since in any sense that '' could be said to "match", it matches at
>4 slice positions in 'abc', not 2.
Which is what I was trying to get at with:
or, ugly, but consistent with *find results
(finding the separator front, back, and between all):

 >>> ';a;b;c;'.split(';')
 ['', 'a', 'b', 'c', '']
I.e., return the latter value, as you say.
Which also joins ok-ly:

 >>> ''.join(['', 'a', 'b', 'c', ''])


 [21:33] C:\pywk>perl "-e print join('-', split(//, 'abc'))"

Not sure which way that'll throw things ;-)

Bengt Richter

More information about the Python-list mailing list