AttributeError:模块 'datetime' 没有属性 'now'

我正在自学Python。现在我遇到了一些问题。下面是我从运行良好的视频中复制的代码。

import datetime

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

当我使用 Pycharm & sublime 运行代码时出现错误。下面是sublime的错误信息

<class 'module'>
Traceback (most recent call last):

  File "D:programmingpythondatetime.py", line 1, in <module>
    import datetime

  File "D:programmingpythondatetime.py", line 4, in <module>
    d1 = datetime.datetime.now()

AttributeError: module 'datetime' has no attribute 'now'

下面是pycharm的错误信息

D:programmingpythonvenvScriptspython.exe C:Program FilesJetBrainsPyCharm 2018.1.2helperspydevpydevconsole.py" 63029 63030
<class 'module'>
Traceback (most recent call last):

  File "C:Program FilesJetBrainsPyCharm 2018.1.2helperspydevpydevconsole.py", line 4, in <module>
    from _pydev_imps._pydev_saved_modules import thread

  File "C:Program FilesJetBrainsPyCharm 2018.1.2helperspydev_pydev_imps_pydev_saved_modules.py", line 21, in <module>
    import xmlrpc.client as xmlrpclib

  File "D:programmingAnoconda3libxmlrpcclient.py", line 134, in <module>
    from datetime import datetime

  File "D:programmingpythondatetime.py", line 4, in <module>
    d1 = datetime.datetime.now()

AttributeError: module 'datetime' has no attribute 'now'
Process finished with exit code 1

此代码在 IDLE 和 cmd 下运行良好。当我只编码 print(type(datetime)) 时它运行良好,但打印双倍类型的日期时间。

我不知道怎么办,请给我一些建议。谢谢。

stack overflow AttributeError: module 'datetime' has no attribute 'now'
原文答案

答案:

作者头像

##### 编辑**:

用户自己的自定义 datetime.py 模块覆盖了标准库,下面的信息仍然有助于理解为什么会发生这种情况。导入算法首先检查您的直接目录。您可以使用以下命令检查模块文件路径:

print a_module.__file__

欢迎来到编程的狂野世界。所以,我不确定我是否完全理解你的问题,所以我会尝试分解一些事情并留出空间供你讨论。

当您导入日期时间时,您会导入所谓的模块。无需详细介绍模块就是通常所说的命名空间,它们用于在层次结构下创建属性分离,因此您不会在导入时意外覆盖其他代码。您可以阅读更多关于它的信息 here

datetime 模块提供了用于以简单和复杂的方式处理日期和时间的类。虽然支持日期和时间算术,但实现的重点是用于输出格式和操作的有效属性提取。有关相关功能,另请参阅时间和日历模块。

当您导入它并在其上运行 type 方法时,您应该会看到以下结果:

>>> import datetime
>>> type(datetime)
<class 'module'>

内置类型方法文档说明如下:

4.12.6。类型对象 类型对象表示各种对象类型。对象的类型由内置函数 type() 访问。对类型没有特殊操作。标准模块类型定义了所有标准内置类型的名称。

当您显式打印该输出时,结果将相同:

>>> print(type(datetime))
<class 'module'>

模块在导入时公开属性。您正在访问的属性是 datetime 模块 datetime 属性,它是一个恰好具有相同名称的。因此,当您访问它时,它看起来像 datetime.datetime

该类支持名为“now”的方法(也是类的属性,而不是模块)。因此,当您访问该方法时,它看起来像 datetime.datetime.now() 来调用它。

如果您想在导入时简化此层次结构,您可以澄清您只希望 datetime 类脱离 datetime 模块:

from datetime import datetime
#and the access its now method simpler
d1 = datetime.now()

这可能有助于解决属性访问问题,这可能是一个混淆问题。如果您想进一步澄清您的问题,请随时这样做!

我希望这有帮助。

作者头像

检查您是否使用通配符导入

from datetime import datetime, timedelta
from some_lib import *

some_lib 可能有另一个重新定义你的日期时间导入

# in some_lib:
import datetime
作者头像
import datetime
datetime.datetime.now()

尝试使用它。它可能会工作

作者头像

只需导入 _datetime 而不是 datetime

示例代码:

import _datetime

today = _datetime.date.today()

print(today)
作者头像

就我而言,我不小心有两条导入线。删除第二个导入解决了这个问题。

from datetime import datetime
import datetime  # <-- Remove to make it work!

datetime.now()
作者头像

我遇到了同样的问题,发现是因为 datetime 模块中的命名不好,datetime 是 datetime 模块中的一个子类。

我通过使用解决了这个问题:

import datetime
from datetime import datetime as dt

now = dt.now()
next = now + datetime.timedelta(minutes = 5)

next_time = next.strftime("%H:%M:%S")

current_time = now.strftime("%H:%M:%S")
print("MPS updated at {}, it will update again at {}".format(current_time, next_time))
作者头像

这对我有用:

from datetime import datetime
d1 = datetime.now()
作者头像

要消除此错误(AttributeError: module 'datetime' has no attribute 'now'),请使用参数 now() as

import datetime
time = datetime.datetime.now()
print(time)
作者头像

这将适用于 python 3.9

import datetime as dt

currentDateTime = dt.datetime.now()
start_date = currentDateTime.date()
end_date = start_date +  datetime.timedelta(30)
作者头像
import datetime

x = datetime.datetime.now()

print(x)

好的,所以我有同样的问题,从这里和那里搜索之后。我所做的只是将程序名称从 datetime.py 更改为 datetime example.py 。并且kaboom它起作用了。