TypeError: “module” object is not callable


File "C:UsersAdministratorDocumentsMibotoopslinkserv.py", line 82, in __init__
    self.serv = socket(AF_INET,SOCK_STREAM)
TypeError: "module" object is not callable

Why am I getting this error? I"m confused.

What do you need to know to answer my question?

Answer rating: 672

socket is a module, containing the class socket.

You need to do socket.socket(...) or from socket import socket:

>>> import socket
>>> socket
<module "socket" from "C:Python27libsocket.pyc">
>>> socket.socket
<class "socket._socketobject">
>>> from socket import socket
>>> socket
<class "socket._socketobject">

This is what the error message means:
It says module object is not callable, because your code is calling a module object. A module object is the type of thing you get when you import a module. What you were trying to do is to call a class object within the module object that happens to have the same name as the module that contains it.

Here is a way to logically break down this sort of error:

  • "module object is not callable. Python is telling me my code trying to call something that cannot be called. What is my code trying to call?"
  • "The code is trying to call on socket. That should be callable! Is the variable socket is what I think it is?'
  • I should print out what socket is and check print socket

Answer rating: 236

Assume that the content of YourClass.py is:

class YourClass:
    # ......

If you use:

from YourClassParentDir import YourClass  # means YourClass.py

In this way, you will get TypeError: "module" object is not callable if you then tried to call YourClass().

But, if you use:

from YourClassParentDir.YourClass import YourClass   # means Class YourClass

or use YourClass.YourClass(), it works.