AttributeError module 'datetime' has no attribute 'strptime'

avatar

Borislav Hadzhiev

Last updated: Apr 20, 2022

banner

Photo from Unsplash

AttributeError module 'datetime' has no attribute 'strptime' #

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(...).

attributeerror module datetime has no attribute strptime

Here is an example of how the error occurs.

main.py
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.

main.py
import datetime dt = datetime.datetime.strptime( "21/11/22 09:30", "%d/%m/%y %H:%M" ) print(dt) # 👉️ 2022-11-21 09:30:00
Make sure you haven't named your local module 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.

main.py
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.

main.py
# 👇️ 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.

main.py
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.

If you try to access any attribute that is not in this list, you would get the "AttributeError: module has no attribute".

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.

main.py
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.

Conclusion #

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(...).

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.