Borislav Hadzhiev
Wed Apr 20 2022·2 min read
Photo by Holly Mandarich
The error "AttributeError module 'datetime' has no attribute 'strptime'"
occurs when we try to call the strptime
method directly on the datetime
module. To solve the error, use the following import import datetime
and call
the strptime
method as datetime.datetime.strptime(...)
.
Here is an example of how the error occurs.
import datetime # ⛔️ AttributeError: module 'datetime' has no attribute 'strptime' dt = datetime.strptime("21/11/22 09:30", "%d/%m/%y %H:%M") print(dt)
The issue in the code sample is that we are trying to call the strptime
method
directly on the datetime
module.
To solve the error, call the strptime
method on the datetime
class instead.
import datetime dt = datetime.datetime.strptime( "21/11/22 09:30", "%d/%m/%y %H:%M" ) print(dt) # 👉️ 2022-11-21 09:30:00
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 dt = datetime.strptime("21/11/22 09:30", "%d/%m/%y %H:%M") print(dt) # 👉️ 2022-11-21 09:30:00
We imported the datetime class from the datetime module and called the strptime method on the class.
It is quite confusing that there is a class named datetime
in the datetime
module.
You can make your code a bit easier to read by using an alias in your import statement.
# 👇️ alias datetime class to dt from datetime import datetime as dt result = dt.strptime("21/11/22 09:30", "%d/%m/%y %H:%M") print(result) # 👉️ 2022-11-21 09:30:00
We aliased the datetime
class to dt
, so you would call the strptime
method
as dt.strptime()
instead of datetime.strptime()
.
The best way to start debugging the "AttributeError module 'datetime' has no
attribute 'strptime'" 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 strptime
, 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 strptime()
method.
If you import the datetime
class from the datetime
module and pass it to the
dir()
function, you will see the strptime
method in the list of attributes.
from datetime import datetime # 👇️ [... 'strptime', ...] print(dir(datetime))
If you got the error "AttributeError: partially initialized module 'datetime'
has no attribute 'strptime' (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.