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
Почему я получаю эту ошибку? Я смущен.
Что нужно знать, чтобы ответить на мой вопрос?
Ответы:
socket
это модуль, содержащий классsocket
.Вам нужно сделать
socket.socket(...)
илиfrom socket import socket
:Вот что означает сообщение об ошибке:
оно говорит
module object is not callable
, потому что ваш код вызывает объект модуля . Объект модуля - это тип вещи, которую вы получаете при импорте модуля. То, что вы пытались сделать, - это вызвать объект класса внутри объекта модуля, имя которого совпадает с именем модуля, который его содержит.Вот способ логически разбить такого рода ошибки:
module object is not callable
. Python говорит мне, что мой код пытается вызвать то, что не может быть вызвано. Что мой код пытается вызвать?"socket
. Это должно вызываться! Является ли переменнаяsocket
тем, чем я думаю?»print socket
источник
print socket
вы увидите, что имяsocket
является модулем. Он должен быть связан с этим модулем где - то ! Внимательно прочитайте свой код, и я уверен, что вы увидитеimport socket
или что-то подобное там, где вы этого не ожидаете.socket.socket
было немного запутанным. Я просто сделал,import write_to_file
а затем, так как метод, который я использовал внутри,write_to_file.py
назван,writeToTextFile
я просто рандwrite_to_file.writeToTextFile
Предположим, что содержимое YourClass.py :
Если вы используете:
Таким образом, я получил TypeError: объект 'module' не вызывается, если вы пытались его использовать
YourClass()
.Но, если вы используете:
или используйте
YourClass.YourClass()
, это работает для меня.источник
Добавьте к основному
__init__.py
в YourClassParentDir, например:Затем у вас будет готов экземпляр вашего класса, когда вы импортируете его в другой скрипт:
источник
from .YourClass import YourClass
в__init__.py
файле?Вот еще одна ошибка, на которую мне потребовалось некоторое время, чтобы увидеть даже после прочтения этих постов. Я настраивал скрипт для вызова моих скриптов python bin. Я получал модуль не вызываемый тоже.
Мой зиг был в том, что я делал следующее:
когда мой заг нужно было сделать следующее:
Таким образом, дважды проверьте ваш пакет и вложенность модуля.
То, что я пытаюсь сделать, это иметь каталог scripts, который не имеет расширения * .py, и все еще имеет модули 'bin', которые должны быть в mypackage / bin, и у них есть мое расширение * .py. Я новичок в упаковке и пытаюсь следовать стандартам, как я их интерпретирую. Итак, у меня в настройке root:
Если это не соответствует стандарту, пожалуйста, дайте мне знать.
источник
Кажется, что вы сделали, импортировал
socket
модуль какimport socket
. Поэтомуsocket
это модуль. Вам нужно либо изменить эту строку наself.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, как и любое другое использованиеsocket
модуля, либо изменить оператор импорта наfrom socket import socket
.Или у вас есть
import socket
послеfrom socket import *
:источник
import socket
, который будет импортировать модуль,socket
переопределяющий классsocket
. Смотрите фрагмент кода в редактировании.from <...> import *
импорта плохие, плохие, плохие более или менее таковы : обычно вы точно знаете, что находится в глобальном пространстве имен, потому что это именно то, что вы поместили туда. Но когда выimport *
, вы заполняете это пространство имен всем, что определяют другие модули. В этом случае неясно, откудаsocket
появилось имя - это модуль или что-то определенное в этом модуле? Если вы всегда используетеimport socket
илиfrom socket import socket
, у вас никогда не возникнет этой проблемы, поскольку вы можете точно знать, какие имена используются.Я знаю, что этой ветке год, но настоящая проблема в вашем рабочем каталоге.
Я считаю, что рабочий каталог есть
C:\Users\Administrator\Documents\Mibot\oops\
. Пожалуйста, проверьте файл, указанныйsocket.py
в этом каталоге. Как только вы найдете его, переименуйте или переместите его. Когда вы импортируете сокет,socket.py
из текущего каталога используется вместоsocket.py
из каталога Python. Надеюсь, это помогло. :)Примечание. Никогда не используйте имена файлов из каталога Python для сохранения имени файла вашей программы; это будет конфликтовать с вашей программой (программами).
источник
socket.py
. Ну, это было причиной того же сообщения об ошибке. Эта страница поставила меня на правильный путь: python-notes.curiousefficiency.org/en/latest/python_concepts/…При настройке точки входа console_scripts в setup.py я обнаружил, что эта проблема существует, когда конечной точкой является модуль или пакет, а не функция внутри модуля.
Например
Должны были быть
Так что это будет относиться к вызываемой функции, а не к самому модулю. Кажется, нет никакой разницы, если модуль имеет
if __name__ == '__main__':
блок. Это не сделает модуль вызываемым.источник
Я предполагаю, что вы переопределили встроенную функцию / переменную или что-то еще «модуль», установив глобальную переменную «модуль». просто распечатайте модуль и посмотрите, что в нем.
источник
проверьте операторы импорта, так как модуль не вызывается. В Python все (включая функции, методы, модули, классы и т. Д.) Является объектом.
источник
Простым способом решения этой проблемы является экспорт
PYTHONPATH
переменной среды. Например, для Python 2.6 в Debian / GNU Linux:В других операционных системах вы сначала найдете местоположение этого модуля или
socket.py
файла.источник