DEV Community

Srinivas for ItsMyCode

Posted on • Originally published at itsmycode.com on

TypeError: ‘module’ object is not callable

ItsMyCode |

Python throws TypeError: ‘module’ object is not callable when you get confused between the class name and module name. There are several reasons why this might happen while coding. Let’s look at each scenario, and the solution to fix the ‘ module ‘ object is not callable error.

What is TypeError: ‘module’ object is not callable in Python?

You will get this error when you call a module object instead of calling a class or function inside that module object. In Python, a callable object must be a class or a function that implements the “ __call__” method.

** Example 1 – Calling a built-in Python module as a function **

** ** The below code is a straightforward example of importing a socket module in Python, and after the import, we are accessing the module as a function. Since we use the same name and run the “socket” module name as a function, Python will throw TypeError: ‘module’ object is not callable.

#Importing the socket module in Python

import socket
#Calling the os module as a function
s = socket(socket.AF_INET, socket.SOCK_STREAM)
print(s)

Enter fullscreen mode Exit fullscreen mode

Output

Traceback (most recent call last):
  File "c:\Projects\Tryouts\Python Tutorial.py", line 2, in <module>
    s = socket(socket.AF_INET, socket.SOCK_STREAM)
TypeError: 'module' object is not callable
Enter fullscreen mode Exit fullscreen mode

It mostly happens with developers who tend to get confused between the module name and the class names.

Solution 1 – ** Instead of directly calling the module name, call the function using **Modulename.FunctionName , which is defined inside the module.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(s)

Enter fullscreen mode Exit fullscreen mode

*Solution 2 – * Another solution is to change the import statement, as shown below. Here the compiler will not get confused between the module name and the function name while executing the code.

from socket import *

s = socket(AF_INET, SOCK_STREAM)
print(s)
Enter fullscreen mode Exit fullscreen mode

Output

<socket.socket fd=444, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
Enter fullscreen mode Exit fullscreen mode

Example 2 – Calling custom module as a function

Another scenario where we have a custom module as “ namemodule ” and using this as a function that leads to TypeError.

Below example we have created a file with namemodule.py

def namemodule():
 name='Chandler Bing'
 print(name)
Enter fullscreen mode Exit fullscreen mode

In the second step we are trying to import the namemodule and calling it as a function which leads to TypeError.

import namemodule

print(namemodule())
Enter fullscreen mode Exit fullscreen mode

Solution: Instead of importing the module, you can import the function or attribute inside the module to avoid the typeerror module object is not callable, as shown below.

from namemodule import namemodule

print(namemodule())

# Output
# Chandler Bing
Enter fullscreen mode Exit fullscreen mode

The post TypeError: ‘module’ object is not callable appeared first on ItsMyCode.

Discussion (1)

Collapse
foxy4096 profile image
Aditya Priyadarshi

That's very helpful, Thanks