Bug or feature? 'abc'.split('') rejects empty separator
bokr at oz.net
Mon Feb 11 06:33:55 CET 2002
On Sun, 10 Feb 2002 18:05:01 -0500, "Tim Peters" <tim.one at home.com> wrote:
>> >>> 'abc'.split('')
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in ?
>> ValueError: empty separator
>> Wouldn't it make sense to return list('abc') ?
>> 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:
>is what it should return." That's also compatible with
> ''.join[['abc']] == 'abc'
Of course you mean
This option is also compatible with what re does:
>>> import re
(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', '']
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 ;-)
More information about the Python-list