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

pytest测试中datetime与带T的ISO时间字符串断言失败问题

解决方案

错误原因

  • 第一次报错核心是类型不匹配:等号左侧为datetime类型对象,右侧为ISO格式的字符串,不同类型数据直接对比必然不相等
  • 第二次报错核心是格式不匹配:直接调用str()转换datetime对象时,默认生成的字符串用空格做日期和时间的分隔符,而右侧ISO格式字符串用T做分隔符,两者格式不一致

修复方案

方案1:统一转换为datetime类型对比(优先推荐)

该方案可以完全避免字符串格式差异带来的问题,是时间对比的最优选择:

from datetime import datetime

# 将字符串类型的预期值解析为datetime对象
expected_duration = datetime.fromisoformat(start_model_duration)
assert model_setup.start_model_duration == expected_duration

若使用Python 3.7以下版本,不支持fromisoformat方法,可以用strptime指定格式解析:

expected_duration = datetime.strptime(start_model_duration, "%Y-%m-%dT%H:%M:%S")

方案2:统一转换为同格式字符串对比

如果业务场景需要用字符串形式对比,主动指定统一的格式化规则,不要依赖默认的str()转换:

# 将datetime对象格式化为带T的标准ISO字符串
actual_duration_str = model_setup.start_model_duration.isoformat()
assert actual_duration_str == start_model_duration

也可以调整预期值的格式匹配实际输出:

expected_duration_str = start_model_duration.replace("T", " ")
assert str(model_setup.start_model_duration) == expected_duration_str

进阶优化

如果需要忽略时间精度差异(比如毫秒、秒级误差),可以指定格式化精度:

# 仅对比到分钟级别
assert model_setup.start_model_duration.strftime("%Y-%m-%d %H:%M") == expected_duration.strftime("%Y-%m-%d %H:%M")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:04