无法对timedelta对象求和;先前推荐的解决方案在python 3.7中不起作用

保罗·约翰

关于这个问题,我有一个跟进时间增量对象的跟进:TypeError使用timedelta,不能求和时间

该问题的答案说明sum()期望添加整数,并且您需要确保它知道要添加时间增量对象。解决方案是插入列表项“ datetime.timedelta(0)”以给总和提示。

我不了解我在python 3.7中遇到的此错误。就像其他问题一样,我需要一个总的时间增量对象。尝试使用列表推导来提取timedelta值的代码,与其他问题有相同的错误:

sum([i.time_idle for i in qalt])
*** TypeError: unsupported operand type(s) for +: 'int' and 'Timedelta'

我感到困惑的是,列表中的第二个对象实际上是在上一个问题中建议作为解决方案的对象。检查

[i.time_idle for i in qalt]
[Timedelta('0 days 00:18:40.649903'), datetime.timedelta(0)]

我可以手动添加时间增量对象:

 tlist = [i.time_idle for i in qalt]
 tlist[0] + tlist[1]
 Timedelta('0 days 00:18:40.649903')

但是,求和函数仍然不起作用

 sum(tlist)
*** TypeError: unsupported operand type(s) for +: 'int' and 'Timedelta'

如果您想玩这个游戏,我相信以下内容提供了MRE测试用例:

 klist = [datetime.timedelta(days=0, hours=0, minutes=18, seconds=40), datetime.timedelta(0)]

您会看到sum(klist)失败,但可以运行klist[0] + klist[1]

我正在使用一种变通回我的C根的解决方法:

time_idle_total = datetime.timedelta(seconds=0)
for i in qalt:
    time_idle_total += i.time_idle
豹鲨

您可以根据您的解决方法循环来考虑:

time_idle_total = datetime.timedelta(seconds=0)
for i in qalt:
    time_idle_total += i.time_idle

什么sum确实是有效的:

time_idle_total = 0
for i in qalt:
    time_idle_total += i.time_idle

的第二个参数sum给出初始值以开始求和,但是您只将一个参数传递给sum(恰好有一个timedelta零作为其第二个元素的列表)。所以你仍然需要使用sum([i.time_idle for i in qalt], datetime.timedelta(0))

请注意,它sum((i.time_idle for i in qalt), datetime.timedelta(0))应该稍快一些(用生成器理解而不是列表)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章