python:添加TimeDelta,int不支持的操作数类型
输出:python:添加TimeDelta,int不支持的操作数类型,python,datetime,timedelta,Python,Datetime,Timedelta,输出: from datetime import datetime, timedelta frames_load = 0 times_start_dict = [{'timestamp': datetime(2013, 12, 21, 4, 36, 23)}, {'timestamp': datetime(2013, 12, 21, 4, 36, 23)}] times_end_dict = [{'timestamp': datetime(2013, 12, 21, 4, 36, 53)},
from datetime import datetime, timedelta
frames_load = 0
times_start_dict = [{'timestamp': datetime(2013, 12, 21, 4, 36, 23)}, {'timestamp': datetime(2013, 12, 21, 4, 36, 23)}]
times_end_dict = [{'timestamp': datetime(2013, 12, 21, 4, 36, 53)}, {'timestamp': datetime(2013, 12, 21, 4, 36, 53)}]
for start in times_start_dict:
for end in times_end_dict:
if check_startend(): #dummy function to check other value in dict to see if start/end times match; please comment this out and indent code block to reproduce error
frames_load += end['timestamp'] - start['timestamp']
print frames_load
continue
某些上下文:
我正在迭代由dict
s组成的两个列表,其中分别包含开始时间和结束时间的datetime
对象。一旦开始和结束timedelta
正确匹配(未显示),我会找到经过的时间,它将成为timedelta
对象。我将它分配给frames\u load
,以便在下一次迭代中,我可以添加经过的时间(应该总是正值),计算它就像递增x+=1
。然而,我得到了一个TypeError
,它告诉我在第一次迭代/计算之后,frames\u load
现在是一个int
对象,不再是timedelta
对象
如何将
timedelta
s添加到frames\u load
,以便它可以显示聚合/和timedelta
?首先,此代码无法输出00:00:35
,因为frames\u load=0
最初
其次,错误说明了一切,您不能将timedelta,即end['timestamp']-start['timestamp']
添加到整数,即0
如果要求累计时间增量之和,应初始化frames\u load=timedelta()
。或者,以下代码将完成此操作:
Traceback (line 11): "frames_load += end['timestamp'] - start['timestamp']"
TypeError: unsupported operand type(s) for +=: 'int' and 'datetime.timedelta'
您的错误消息与您的代码块不匹配,请参阅
int(…)
@Nabla谢谢您的编辑,我对在堆栈上发布/评论不熟悉。我的错误与代码块不匹配是什么意思?我写这篇文章是为了表示我的代码和错误,所以也许你指的是一个我没有看到的差异。你能详细解释一下吗?@nabla你的意思是不能将错误int添加到与第4行不匹配的timedelta对象中吗?你在代码中发布的行是frames\u load+=end['timestamp']-start['timestamp']
。错误回溯中的同一行读取frames\u load+=int(end['timestamp']-start['timestamp'])
。因此,代码与产生错误的代码不同。这使得很难给出准确的答案。此外,您还应该显示最小代码初始化frames\u load
和最佳times\u start\u dict
和times\u end\u dict
,这样每个人都可以重现错误。您已经从@alko得到了答案:而不是frames\u load=0
使用frames\u load=timedelta()
。非常感谢@alko,nabla,以及其他作出贡献的人。我曾经尝试过一种类似的方法来初始化frames\u load
到datetime.timedelta(),但是出现了错误。我想是datetime模块在这里被隐式调用了吧?
times_start_dict = [{'timestamp': datetime(2013, 12, 21, 4, 36, 23)},
{'timestamp': datetime(2013, 12, 21, 4, 36, 23)}]
times_end_dict = [{'timestamp': datetime(2013, 12, 21, 4, 36, 25)},
{'timestamp': datetime(2013, 12, 21, 4, 36, 26)}]
print sum((end['timestamp'] - start['timestamp']
for start, end in zip(times_start_dict, times_end_dict)),
timedelta())
# 0:00:05