Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 414
Yq Lee Avatar asked Jun 01 '18 08:06

Yq Lee


People also ask

How to fix AttributeError module datetime has no attribute now?

If you got the error "AttributeError: partially initialized module 'datetime' has no attribute 'now' (most likely due to a circular import)", there is a file called datetime.py in your local codebase. To solve the error, make sure to not use names of built-in or remote modules, e.g. datetime.py , for your local files.

How do I get the current date and time in python?

Datetime module comes built into Python, so there is no need to install it externally. To get both current date and time datetime. now() function of DateTime module is used. This function returns the current local date and time.

Does Utcnow have no attribute?

The error "AttributeError module 'datetime' has no attribute 'utcnow'" occurs when we try to call the utcnow method directly on the datetime module. To solve the error, use the following import import datetime and call the utcnow method as datetime. datetime. utcnow() .

How do I get the current date in python?

today() method to get the current local date. By the way, date. today() returns a date object, which is assigned to the today variable in the above program. Now, you can use the strftime() method to create a string representing date in different formats.


1 Answers

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.

like image 158
csevier Avatar answered Sep 21 '22 20:09

csevier