Missing values in tuple assignment

Albert Hopkins marduk at letterboxes.org
Thu Mar 19 13:17:59 EDT 2009


On Thu, 2009-03-19 at 11:57 -0500, Jim Garrison wrote:
> Use case: parsing a simple config file line where lines start with a
> keyword and have optional arguments.  I want to extract the keyword and
> then pass the rest of the line to a function to process it. An obvious
> use of split(None,1)
> 
>      cmd,args= = line.split(None,1);
>      if cmd in self.switch: self.switch[cmd](self,args)
>      else: self.errors.append("unrecognized keyword '{0)'".format(cmd))
> 
> Here's a test in IDLE:
> 
>   >>> a="now is the time"
>   >>> x,y=a.split(None,1)
>   >>> x
>   'now'
>   >>> y
>   'is the time'
> 
> However, if the optional argument string is missing:
> 
>   >>> a="now"
>   >>> x,y=a.split(None,1)
>   Traceback (most recent call last):
>     File "<pyshell#42>", line 1, in <module>
>       x,y=a.split(None,1)
>   ValueError: need more than 1 value to unpack
> 
> I understand the problem is not with split() but with the assignment
> to a tuple.  Is there a way to get the assignment to default the
> missing values to None?

why not do this?
        >>> a= 'now'
        >>> z = a.split(None, 1)
        >>> x = z[0]
        >>> y = z[1] if len(z) == 2 else None




More information about the Python-list mailing list