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