列表理解ValueError:需要多于1个值来解压缩

时间:2014-03-22 07:58:24

标签: python

从列表理解中调用函数给了我一个 ValueError: need more than 1 value to unpack错误。

我已经定义了这样的函数

def dateTimeStrToTimeStamp(dateTimeStr):
    """ Converts a string like '2014-03-07T19:00:00+0000' to 
    timestamp"""
    dateTimeStr, utcStr = dateTimeStr.split('+')
    dateTimeObj = datetime.strptime(dateTimeStr, "%Y-%m-%dT%H:%M:%S")
    date_in_sec = int(time.mktime(dateTimeObj.timetuple()))
    utc_in_sec = int(utcStr[:2]) + int(utcStr[2:])
    return date_in_sec + utc_in_sec

我有一个数据,这是一个像这样的对象列表

[{u'id': u'1411421469112603', u'start_time': u'2014-03-09T17:00:00+0000', u'end_time': u'2014-03-09T21:00:00+0000'}, {u'id': u'519204234858802', u'start_time': u'2014-03-08T19:00:00+0000', u'end_time': u'2014-03-08T23:00:00+0000'}, {u'id': u'1393120957624703', u'start_time': u'2014-03-08T19:00:00+0000', u'end_time': u'2014-03-08T23:00:00+0000'}]

当我这样做时

[ dateTimeStrToTimeStamp(event['start_time']) for event in data ]

它给了我ValueError: need more than 1 value to unpack

我正在使用python 2.7.3请帮助我,坚持几个小时

2 个答案:

答案 0 :(得分:1)

这一行:

dateTimeStr, utcStr = dateTimeStr.split('+')
dateTimeStr不包含'+'时,

会出现错误。例如,尝试dateTimeStr, utcStr = 'abc'.split('+'),您会看到相同的错误。因此,您需要为没有UTC组件的字符串做好准备,可能是将UTC偏移默认为零。您可以通过捕获异常来检测问题:

try:
   dateTimeStr, utcStr = dateTimeStr.split('+')
except ValueError:
   utcStr = '0'

或者如果没有UTC组件的输入字符串确实是您的函数的错误,您可以提供更有用的错误消息:

try:
   dateTimeStr, utcStr = dateTimeStr.split('+')
except ValueError as e:
   raise ArgumentError('dateTimeStr {!r} has no UTC component'.format(dateTimeStr)) from e

答案 1 :(得分:0)

此错误是从您的自定义函数引发的,您传入的其中一个字符串没有+,因此您的split()方法不返回包含两个项目的列表,当您尝试时要打开它,你得到ValueError: need more than 1 value to unpack

以下是您的错误的一个简单示例:

>>> 'ab'.split('-')
['ab']
>>> a,b = 'ab'.split('-')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack