【问题标题】:AttributeError: module 'datetime' has no attribute 'now'AttributeError:模块 'datetime' 没有属性 'now'
【发布时间】:2018-11-11 08:37:04
【问题描述】:

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

import datetime

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

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

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

  File "D:\programming\python\datetime.py", line 1, in <module>
    import datetime

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

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

下面是pycharm的错误信息

D:\programming\python\venv\Scripts\python.exe C:\Program Files\JetBrains\PyCharm 2018.1.2\helpers\pydev\pydevconsole.py" 63029 63030
<class 'module'>
Traceback (most recent call last):

  File "C:\Program Files\JetBrains\PyCharm 2018.1.2\helpers\pydev\pydevconsole.py", line 4, in <module>
    from _pydev_imps._pydev_saved_modules import thread

  File "C:\Program Files\JetBrains\PyCharm 2018.1.2\helpers\pydev\_pydev_imps\_pydev_saved_modules.py", line 21, in <module>
    import xmlrpc.client as xmlrpclib

  File "D:\programming\Anoconda3\lib\xmlrpc\client.py", line 134, in <module>
    from datetime import datetime

  File "D:\programming\python\datetime.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)) 时它运行良好,但打印双倍类型的日期时间。

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

【问题讨论】:

  • 只是为任何发现自己处于类似解决方案中的人提供的简短信息。问题的原因可能是这两个之一:您的命名空间包含另一个(可能是自己的)datetime 实例,这使得名称冲突为csevier explained --- 或者您只是使用整个模块而不是一个实例,这可以是由from datetime import datetime 解决,而不是import datetimedatetime.datetime.now() 而不是datetime.now() 提供的here

标签: datetime module attributes attributeerror


【解决方案1】:
编辑**:

用户自己的自定义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 属性,它是一个恰好具有相同名称的 class。所以当你访问它看起来像 datetime.datetime

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

如果您想在导入时简化这种层次结构,您可以明确说明您只希望 datetime 类脱离 datetime 模块:

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

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

我希望这会有所帮助。

【讨论】:

  • 首先,非常感谢您的帮助。这无济于事。在寻求帮助之前,我曾经尝试过这个。我已经重新安装了 pycharm 和 sublime,但也没有用。我尝试过另一台使用 sublime 的计算机,这段代码运行良好。我曾经怀疑环境路径有问题。我已经安装了 anaconda、java 和 VS 代码。但是这段代码通过 IDLE 和 cmd 运行良好。那么,您对此以及双重打印类型信息的问题有任何想法吗?非常感谢。
  • 哦,所以它只有在从 IDE 运行时出现属性错误?它使用的是什么python版本?
  • python 版本为 3.65。当我使用内部 IDLE 运行时,我得到了正确的结果,还有 cmd。我已经安装了 anaconda、VS 代码、java、pycharm 和可移植的 sublime。那么环境变量或路径错误是否有可能?
  • 今天我重新安装了python,卸载了anaconda,pycharm,然后下载了python 3.65-amd,也运行不了这段代码。打印我得到双打印类模块的日期时间类型。我调用 datetime 方法后的错误和以前一样,没有属性。 (所有这些都以崇高的方式运行)。所以我不知道发生了什么。
  • Yq,感谢您的更新。在深入检查您的堆栈跟踪后,我发现您的 IDE 安装在驱动器名称 c 上,python 解释器安装在 d 上。这是故意的吗?我不熟悉 sublimes python 集成,但我的假设是你必须将它配置为指向 python 的安装。为了理智起见,您能否再次发送运行此代码的成绩单。在您的 IDE 指向的同一个解释器中逐行显示?
【解决方案2】:

只需导入_datetime 而不是datetime

示例代码:

import _datetime

today = _datetime.date.today()

print(today)

【讨论】:

  • 这与导入日期时间有什么不同?
【解决方案3】:

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

from datetime import datetime, timedelta
from some_lib import *

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

# in some_lib:
import datetime

【讨论】:

    【解决方案4】:
    import datetime
    datetime.datetime.now()
    

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

    【讨论】:

      【解决方案5】:

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

      from datetime import datetime
      import datetime  # <-- Remove to make it work!
      
      datetime.now()
      

      【讨论】:

        【解决方案6】:
        import datetime
        
        x = datetime.datetime.now()
        
        print(x)
        

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

        【讨论】:

        • 我认为,后者很重要,因为它解决了 csevier explained 的冲突名称。小提示:避免在文件名中使用空格。
        【解决方案7】:

        我也遇到过这个错误,经过几次搜索我发现了问题。

        我将自己的文件命名为datetime.py,因此在导入datetime 模块时,python 会搜索直接目录并最终导入同一个文件,当然它找不到任何now()方法并因此引发错误。

        解决方案 - 将当前文件名从 datetime.py 更改为其他名称或使用:
        import _datetime

        【讨论】:

          【解决方案8】:

          我遇到了同样的问题,发现是因为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))
          

          【讨论】:

          • 您可以(并且应该)删除您的第一行。
          【解决方案9】:

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

          import datetime
          time = datetime.datetime.now()
          print(time)
          

          【讨论】:

            【解决方案10】:

            这对我有用:

            from datetime import datetime
            d1 = datetime.now()
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-10-29
              • 2018-04-14
              • 2019-02-18
              • 1970-01-01
              • 2019-07-17
              • 2020-01-01
              • 2019-07-20
              相关资源
              最近更新 更多