You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python两个datetime列表元素相减报TypeError的解决方法

报错原因

你的循环逻辑存在错误:for time in end_times 迭代列表时,变量time拿到的是列表内存储的datetime.datetime时间对象本身,不是整数类型的列表索引。你把这个时间对象当作下标去访问end_times[time]、start_times[time],就会触发你看到的报错——Python列表的索引只能是整数或者切片,不支持传入datetime类型的对象。

正确实现方案

你提到两个列表的时间是一一对应的,只要保证两个列表长度一致,用下面两种写法都可以正确计算时间差:

  • 索引遍历法:通过整数下标循环,取对应位置的时间做差
import datetime

def print_script_runtimes(start_times, end_times):
    # 前置校验长度,避免索引越界
    if len(start_times) != len(end_times):
        raise ValueError("开始时间与结束时间列表长度不匹配,无法一一对应计算")
    for i in range(len(end_times)):
        diff = end_times[i] - start_times[i]
        print(f"第{i+1}条记录耗时:{diff}")
  • zip并行遍历法:直接把两个列表对应位置的元素打包成组,不需要手动维护索引,写法更简洁
import datetime

def print_script_runtimes(start_times, end_times):
    if len(start_times) != len(end_times):
        raise ValueError("开始时间与结束时间列表长度不匹配,无法一一对应计算")
    for idx, (start_t, end_t) in enumerate(zip(start_times, end_times), start=1):
        diff = end_t - start_t
        print(f"第{idx}条记录耗时:{diff}")
补充说明
  • 你用start_times.append(datetime.now())的方式往列表追加时间的写法是没问题的,只要保证追加开始时间、结束时间的顺序一一对应即可。
  • Python原生支持两个datetime对象直接相减,返回结果是timedelta类型的时间差对象,可以直接转字符串打印;如果需要提取秒、毫秒等特定单位的数值,可以直接访问timedelta对象的seconds、microseconds属性做换算。

内容的提问来源于stack exchange,提问作者davida28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:09:26