Python中datetime字符串与datetime实例比较报AttributeError如何解决
错误原因
报错是因为datetime模块的导入方式和实际调用逻辑不匹配:
- 如果你采用的是
from datetime import datetime的导入方式,相当于直接把datetime类导入到当前命名空间,此时直接调用datetime.utcnow()即可,不需要额外加一层.datetime。你代码里写的datetime.datetime.utcnow()相当于在datetime类内部查找名为datetime的属性,该属性不存在因此抛出错误。 - 如果你采用的是
import datetime的导入方式,相当于导入整个datetime模块,此时datetime模块下的datetime类才包含fromisoformat、utcnow等方法,你代码左侧的datetime.fromisoformat写法本身就会报错。
修复方案
有两种可直接使用的修复方式,任选其一即可:
方案1(推荐,代码更简洁)
确认你的导入语句为from datetime import datetime,将比较语句修改为:
if datetime.fromisoformat(item[1]) < datetime.utcnow():
方案2
确认你的导入语句为import datetime,将比较语句修改为:
if datetime.datetime.fromisoformat(item[1]) < datetime.datetime.utcnow():
补充注意事项
datetime.fromisoformat方法仅支持Python 3.7及以上版本,如果你使用的是更低版本的Python,需要改用datetime.strptime配合格式字符串解析。- 上述代码中两个比较的都是不带时区信息的朴素datetime对象,如果你后续涉及时区转换场景,建议统一给datetime对象添加时区信息,避免出现不符合预期的比较结果。
内容的提问来源于stack exchange,提问作者Towphy PY
相关产品推荐
相关产品推荐

