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


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

    I am learning Python on my own. Now I have encountered some problems. Below is my code which copy from the video who running well.

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

    when I running the code using Pycharm & sublime I got error. Below is the error information of 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'

    below is the error information of 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

    This code running well under IDLE and cmd. And it's running well when I just coding print(type(datetime)), but print double times type of datetime.

    I don't know how to do, please give me some advice. Thanks.

    评论

    Just a short info for anybody who finds himself in a similar solution. The reason for the problem can likely be one of these two: your namespace contains another (maybe own) instance of datetime which makes conflicting names as csevier explained --- or you just use the whole module instead of an instance, which can be solved by either from datetime import datetime instead of import datetime or datetime.datetime.now() instead of datetime.now() as provided here.
    – Cadoiz
    Sep 3, 2021 at 9:19

    回答1

    EDIT**:

    User's own custom datetime.py module was overriding standard library, the information below is still useful to understand why that would happen. The import algorithm first checks your immediate directory. You can check that modules file path with:

    print a_module.__file__

    Welcome to the wild world of programming. So, im not sure I fully understand your question, so I will try to break some things down and leave room for you to discuss.

    When you import datetime you import whats called a module. Without going into to much detail modules are what are commonly known as namespaces, they serve to create separation of attributes under a hierarchy so you dont accidentally overwrite other code on import. You can read more read about it here:

    The datetime module supplies classes for manipulating dates and times in both simple and complex ways. While date and time arithmetic is supported, the focus of the implementation is on efficient attribute extraction for output formatting and manipulation. For related functionality, see also the time and calendar modules.

    When you import it and run the type method on it you should see the following results:

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

    The builtin type method documentation states the following:

    4.12.6. Type Objects Type objects represent the various object types. An object’s type is accessed by the built-in function type(). There are no special operations on types. The standard module types defines names for all standard built-in types.

    when you explicitly print that output it will be the same result:

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

    Modules expose attributes on import. The attribute you are accessing is the datetime modules datetime attribute which is a class that happens to just have the same name. So when you access it looks like datetime.datetime

    That class supports a method (which is also an attribute of the class, not the module) named "now". So, when you are accessing that method it looks like datetime.datetime.now() to call it.

    If you wanted to simplify this heirarchy on import you could clarify that you only want the datetime class out of the datetime module:

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

    This may help with the attribute access problems, it may be a matter of confusion. If you want to clarify your problem more, please feel free to do so!

    I hope this helps.

    from datetime import datetime

    type(datetime)   这样显示的是<class 'type'>

    回答2

    import datetime
    datetime.datetime.now()

    try using it.It may work

  • 相关阅读:
    【JVM】程序计数器(四)
    【JVM】运行时数据区概述及线程(三)
    【JVM】类加载子系统(二)
    MyException--org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ###
    计算机常用指令大全
    HTML的设计与应用
    想得太多,又做的太少
    互联网数据库分库分表现状及一点思考
    python中的函数与文件操作
    python中的流程控制语句
  • 原文地址:https://www.cnblogs.com/chucklu/p/16702130.html
Copyright © 2020-2023  润新知