You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python代码运行报错:AttributeError: module 'datetime' has no attribute 'now'

问题根源分析

你的问题出在脚本文件名和Python标准库模块重名了!你把自己的代码文件命名成了datetime.py,而Python在导入模块时,会优先从当前执行目录加载文件,所以当你写import datetime时,实际上导入的是你自己写的这个datetime.py,而不是系统自带的标准库datetime模块。

这就导致了后续调用datetime.datetime.now()时出错——你自己的脚本里并没有定义datetime这个类,自然也就没有now()方法了。

为什么不同环境表现不一样?
  • IDLE和命令提示符(cmd)可能在运行时,当前工作目录不是你这个datetime.py所在的目录,或者环境的模块搜索路径优先级不同,所以碰巧导入了标准库的datetime
  • 而PyCharm和Sublime默认会把脚本所在目录加入模块搜索路径的最前面,所以优先加载了你自己的重名文件,直接触发报错。

至于仅执行print(type(datetime))时会两次输出类型,是因为你的重名脚本被导入时,里面的代码会被执行一次,加上环境本身的加载机制可能重复触发了导入/执行,导致两次输出。

解决方案
  1. 重命名你的脚本文件:立刻把datetime.py改成其他不与标准库重名的名字,比如datetime_demo.py或者my_datetime_test.py
  2. 清理缓存文件:删除当前目录下的__pycache__文件夹(如果存在的话),Python会缓存模块文件,避免残留的缓存影响后续运行;
  3. 重新运行脚本:此时Python会正确找到并导入标准库的datetime模块,你的代码就能正常执行了。
验证修改后的代码

修改文件名后,再运行你的代码:

import datetime
print(type(datetime))
d1 = datetime.datetime.now()
print(d1)

会输出类似:

<class 'module'>
2024-05-20 14:30:00.123456

完全符合预期。

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

火山引擎 最新活动