TypeError: 'module' object is not callable

前端 未结 11 1716
耶瑟儿~
耶瑟儿~ 2020-11-22 12:06
File \"C:\\Users\\Administrator\\Documents\\Mibot\\oops\\blinkserv.py\", line 82, in __init__
    self.serv = socket(AF_INET,SOCK_STREAM)
TypeError: \'module\' objec         


        
相关标签:
11条回答
  • 2020-11-22 12:32

    check the import statements since a module is not callable. In Python, everything (including functions, methods, modules, classes etc.) is an object.

    0 讨论(0)
  • 2020-11-22 12:33

    Short answer: You are calling a file/directory as a function instead of real function

    Read on:

    This kind of error happens when you import module thinking it as function and call it. So in python module is a .py file. Packages(directories) can also be considered as modules. Let's say I have a create.py file. In that file I have a function like this:

    #inside create.py
    def create():
      pass
    

    Now, in another code file if I do like this:

    #inside main.py file
    import create
    create() #here create refers to create.py , so create.create() would work here
    

    It gives this error as am calling the create.py file as a function. so I gotta do this:

    from create import create
    create() #now it works.
    

    Hope that helps! Happy Coding!

    0 讨论(0)
  • 2020-11-22 12:35

    I know this thread is a year old, but the real problem is in your working directory.

    I believe that the working directory is C:\Users\Administrator\Documents\Mibot\oops\. Please check for the file named socket.py in this directory. Once you find it, rename or move it. When you import socket, socket.py from the current directory is used instead of the socket.py from Python's directory. Hope this helped. :)

    Note: Never use the file names from Python's directory to save your program's file name; it will conflict with your program(s).

    0 讨论(0)
  • 2020-11-22 12:35

    When configuring an console_scripts entrypoint in setup.py I found this issue existed when the endpoint was a module or package rather than a function within the module.

    Traceback (most recent call last):
       File "/Users/ubuntu/.virtualenvs/virtualenv/bin/mycli", line 11, in <module>
    load_entry_point('my-package', 'console_scripts', 'mycli')()
    TypeError: 'module' object is not callable
    

    For example

    from setuptools import setup
    setup (
    # ...
        entry_points = {
            'console_scripts': [mycli=package.module.submodule]
        },
    # ...
    )
    

    Should have been

    from setuptools import setup
    setup (
    # ...
        entry_points = {
            'console_scripts': [mycli=package.module.submodule:main]
        },
    # ...
    )
    

    So that it would refer to a callable function rather than the module itself. It seems to make no difference if the module has a if __name__ == '__main__': block. This will not make the module callable.

    0 讨论(0)
  • 2020-11-22 12:36

    It seems like what you've done is imported the socket module as import socket. Therefore socket is the module. You either need to change that line to self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM), as well as every other use of the socket module, or change the import statement to from socket import socket.

    Or you've got an import socket after your from socket import *:

    >>> from socket import *
    >>> serv = socket(AF_INET,SOCK_STREAM)
    >>> import socket
    >>> serv = socket(AF_INET,SOCK_STREAM)
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: 'module' object is not callable
    
    0 讨论(0)
提交回复
热议问题