On Nov 21, 2008, at 9:00 AM, Steve Holden wrote:

Joe Strout wrote:
On Nov 21, 2008, at 2:08 AM, Steven D'Aprano wrote:

  a, b = line.split()

Note that in a case like this, you may want to consider using partition
instead of split:

 a, sep, b = line.partition(' ')

This way, if there happens to be more than one space (for example,
because the Unicode character you're mapping to happens to be a space),
it'll still work.  It also better encodes the intention, which is to
split only on the first space in the line, rather than on every space.

In the special case of the None first argument (the default for the
str.split() method) runs of whitespace *are* treated as single
delimiters. So line.split() is not the same as line.split(' ').

Right -- so using split() gives you the wrong answer for two different reasons. Try these:

>>> line = "1 x"
>>> a, b = line.split()   # b == "x", which is correct

>>> line = "2  "
>>> a, b = line.split()   # correct answer would be b == " "
ValueError: need more than 1 value to unpack

>>> line = "3 x and here is some extra stuff"
>>> a, b = line.split() # correct answer would be b == "x and here is some extra stuff"
ValueError: too many values to unpack

Partition handles these cases correctly (at least, within the OP's specification that the value of "b" should be whatever comes after the first space).

Cheers,
- Joe

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to