列表推导中的ValueError:需要多个值进行解包
我在用列表推导式调用一个函数时,遇到了一个错误,错误信息是 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
这个错误是你自己写的函数引起的。你传入的字符串中有一个没有包含+
,所以你的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
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