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))时会两次输出类型,是因为你的重名脚本被导入时,里面的代码会被执行一次,加上环境本身的加载机制可能重复触发了导入/执行,导致两次输出。
解决方案
- 重命名你的脚本文件:立刻把
datetime.py改成其他不与标准库重名的名字,比如datetime_demo.py或者my_datetime_test.py; - 清理缓存文件:删除当前目录下的
__pycache__文件夹(如果存在的话),Python会缓存模块文件,避免残留的缓存影响后续运行; - 重新运行脚本:此时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




