TypeError: 'module' object is not callable

File "C:\Users\Administrator\Documents\Mibot\oops\blinkserv.py", line 82, in __init__
    self.serv = socket(AF_INET,SOCK_STREAM)
TypeError: 'module' object is not callable

Почему я получаю эту ошибку? Я запутался.

Что нужно знать, чтобы ответить на мой вопрос?

Комментарии к вопросу (1)

socket - это модуль, содержащий класс socket.

Вам необходимо выполнить socket.socket(...) или from socket import socket:

>>> import socket
>>> socket

>>> socket.socket

>>>
>>> from socket import socket
>>> socket

Обратите внимание, что ошибку здесь довольно легко понять: если module object is not callable, то вы, вероятно, вызываете объект модуля! Что такое объект модуля? Это тип объекта, который вы получаете при импорте модуля.

Но даже если вы этого не понимаете (что вполне нормально, часто путают, что классы, модули, функции и т.д. - это просто объекты, как и все остальное), есть довольно простой способ начать отладку:

  • "Хм, module object is not callable. Это звучит так, как будто я пытаюсь вызвать что-то, что вы не можете вызвать. Интересно, что я пытаюсь вызвать?"
  • "О, я вызываю socket. Это должно быть вызываемым! Интересно, является ли переменная socket тем, о чем я думаю?
  • print socket
Комментарии (8)

Предположим, что контент YourClass.py составляет:

class YourClass:
    # ......

Если вы используете:

from YourClassParentDir import YourClass  # means YourClass.py

Таким образом, я получил ошибку TypeError: 'модуль' объект не является вызываемой если вы затем пытались использовать в yourclass()`.

Но, если вы используете:

from YourClassParentDir.YourClass import YourClass   # means Class YourClass

или в yourclass использования.В yourclass (), это работает для меня.

Комментарии (2)

Добавить к основному `init.py в YourClassParentDir, например:

from .YourClass import YourClass

Тогда у вас будет экземпляр вашего класса готов, когда вы импортировать его в другой скрипт:

from YourClassParentDir import YourClass
Комментарии (1)

Вот еще один попался, который взял меня некоторое время, чтобы увидеть даже после прочтения этих постов. Я настраивал скрипт для вызова мой питон ОГРН скрипты. Я получаю модуль не вызвать тоже.

Мой Зиг был, что я делал следующее:

from mypackage.bin import myscript
...
myscript(...)

когда мой заг необходимо сделать следующее:<БР>

from mypackage.bin.myscript import myscript
...
myscript(...)

В резюме, проверьте ваш пакет и модуль раскроя.

То, что я пытаюсь сделать, это иметь каталог скриптов, которые не имеют .расширением py, а еще есть 'бин' модули должны быть в mypackage/bin и эти мои .расширение пы. Я новичок в упаковке, и стараются следовать стандартам, так как я их интерпретации. Итак, я в корне установки:

setup.py
scripts/
      script1
mypackage/
   bin/
      script1.py
   subpackage1/
   subpackage_etc/

Если это не соответствует стандарту, пожалуйста, дайте мне знать.

Комментарии (0)

Похоже, что вы импортировали модуль socket как import socket. Поэтому socket является модулем. Вам нужно либо изменить эту строку на self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM), как и каждое другое использование модуля socket, либо изменить утверждение import на from socket import socket.

Или у вас есть import socket после 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 
TypeError: 'module' object is not callable
Комментарии (4)

Я знаю, что этой теме уже год, но настоящая проблема находится в вашем рабочем каталоге.

Я считаю, что рабочий каталог - это C:\Users\Administrator\Documents\Mibot\oops\. Пожалуйста, проверьте наличие файла с именем socket.py в этой директории. Как только вы его найдете, переименуйте или переместите его. Когда вы импортируете socket, socket.py из текущего каталога будет использоваться вместо socket.py из каталога Python. Надеюсь, это помогло :)

Примечание: Никогда не используйте имена файлов из каталога Python'а для сохранения имени файла вашей программы'ы, это будет конфликтовать с вашей программой(ами).

Комментарии (1)

Простой способ решить эту проблему, экспортируйтеPYTHONPATH переменной среды. Например, для Python 2.6 на Debian/GNU в Линукс:

export PYTHONPATH=/usr/lib/python2.6`

В других операционных системах, вы должны сначала найти этот модуль или файл socket.py`.

Комментарии (0)

При настройке console_scripts ENTRYPOINT в setup.py я нашел этот вопрос существовал, когда конечная точка является модуль или пакет, а не функция в модуле.

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

Например

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

Должны были

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

Так что он будет относиться к вызываемой функции, а не сам модуль. Это, кажется, делает никакой разницы, если модуль имеет если __имя__ == &#39;__основной__&#39;: блок. Это не сделает модуль функцию.

Комментарии (0)

Я думаю, что вы переопределили функцию встроенные/переменная или еще что-то "Модуль" и путем установки глобальной переменной, что "модуля". просто печатать модуля видеть, что в нем.

Комментарии (0)