Borislav Hadzhiev
Wed Apr 20 2022·2 min read
Photo by Andreas Chu
The error "AttributeError module 'datetime' has no attribute 'now'" occurs
when we try to call the now
method directly on the datetime
module. To solve
the error, use the following import import datetime
and call the now
method
as datetime.datetime.now()
.
Here is an example of how the error occurs.
import datetime # ⛔️ AttributeError: module 'datetime' has no attribute 'now' print(datetime.now())
The issue in the code sample is that we are trying to call the now
method
directly on the datetime
module.
To solve the error, call the now
method on the datetime
class instead.
import datetime # 👇️ 2022-05-14 12:48:41.270852 print(datetime.datetime.now())
datetime.py
as that would shadow the official datetime
module.Alternatively, you can change your import statement to import the datetime
class from the datetime
module to not have to type datetime.datetime
which
looks quite confusing.
from datetime import datetime # 👇️ 2022-05-14 12:48:41.270852 print(datetime.now())
We imported the datetime class from the datetime module and called the now method on the class.
It is quite confusing that there is a class named datetime
in the datetime
module.
You can get around this by using an alias in your import statement.
# 👇️ alias datetime class to dt from datetime import datetime as dt # 👇️ 2022-05-14 12:48:41.270852 print(dt.now())
We aliased the datetime
class to dt
, so you would call the now
method as
dt.now()
instead of datetime.now()
.
The best way to start debugging the "AttributeError module 'datetime' has no
attribute 'now'" is to call the dir()
function passing it the imported module.
import datetime """ [ 'MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo' ] """ print(dir(datetime))
If you pass a module object to the dir() function, it returns a list of names of the module's attributes.
We can see that the datetime
module has no attribute named now
, so it must
be an attribute in one of the module's classes.
We can also see that the datetime
module has an attribute datetime
, which is
what we used to successfully call the now()
method.
If you import the datetime
class from the datetime
module and pass it to the
dir()
function, you will see the now
method in the list of attributes.
from datetime import datetime # 👇️ [... 'now', ...] print(dir(datetime))
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.