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
Por que estou recebendo esse erro? Estou confuso.
O que você precisa saber para responder à minha pergunta?
Respostas:
socket
é um módulo, que contém a classesocket
.Você precisa fazer
socket.socket(...)
oufrom socket import socket
:É isso que a mensagem de erro significa:
Diz
module object is not callable
, porque seu código está chamando um objeto de módulo . Um objeto de módulo é o tipo de coisa que você obtém ao importar um módulo. O que você estava tentando fazer é chamar um objeto de classe dentro do objeto do módulo que tenha o mesmo nome que o módulo que o contém.Aqui está uma maneira de quebrar logicamente esse tipo de erro:
module object is not callable
. Python está me dizendo meu código tentando chamar algo que não pode ser chamado. Qual é o meu código tentando chamar?"socket
. Isso deve ser exigível! A variávelsocket
é o que eu acho que é?`print socket
fonte
print socket
isso, verá que o nomesocket
é um módulo. Ele deve ter sido vinculado a esse módulo em algum lugar ! Leia o seu código com atenção e tenho certeza de que você verá umimport socket
ou outro local onde não o espera.socket.socket
foi um pouco confuso. Eu simplesmente fizimport write_to_file
e depois, uma vez que o método que eu estava usando dentrowrite_to_file.py
é chamadowriteToTextFile
simplesmente randwrite_to_file.writeToTextFile
Suponha que o conteúdo de YourClass.py seja:
Se você usar:
Dessa forma, obtive o TypeError: o objeto 'module' não pode ser chamado se você tentar usar
YourClass()
.Mas se você usar:
ou usar
YourClass.YourClass()
, funciona para mim.fonte
Adicione ao main
__init__.py
em YourClassParentDir, por exemplo:Em seguida, você terá uma instância da sua classe pronta ao importá-la para outro script:
fonte
from .YourClass import YourClass
no__init__.py
arquivo?Aqui está outra pegadinha, que me levou um tempo para ver, mesmo depois de ler essas postagens. Eu estava configurando um script para chamar meus scripts python bin. Eu estava recebendo o módulo também não utilizável.
Meu zig era que eu estava fazendo o seguinte:
quando meu zag precisava fazer o seguinte:
Em resumo, verifique novamente o aninhamento de pacotes e módulos.
O que estou tentando fazer é ter um diretório de scripts que não possua a extensão * .py e ainda tenha os módulos 'bin' em mypackage / bin e estes tenham a minha extensão * .py. Eu sou novo em embalagens e estou tentando seguir os padrões enquanto os interpreto. Então, eu tenho na raiz da instalação:
Se isso não estiver em conformidade com o padrão, informe-me.
fonte
Parece que o que você fez foi importado
socket
como o móduloimport socket
. Portanto,socket
é o módulo. Você precisa alterar essa linha paraself.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, assim como qualquer outro uso dosocket
módulo, ou alterar a instrução de importação parafrom socket import socket
.Ou você tem um
import socket
após o seufrom socket import *
:fonte
import socket
, que importará o módulo quesocket
substitui a classesocket
. Veja o snippet de código na edição.from <...> import *
importações são ruins, ruins, ruins é mais ou menos isso: normalmente você sabe exatamente o que está no espaço para nome global, porque é exatamente o que você colocou lá. Mas quando vocêimport *
preenche esse espaço para nome com todo tipo de coisa que outros módulos definem. Nesse caso, não está claro de ondesocket
veio o nome - é o módulo ou algo definido nesse módulo? Se você sempre usaimport socket
oufrom socket import socket
, nunca terá esse problema, pois pode ver exatamente quais nomes estão em uso.Eu sei que este segmento tem um ano, mas o verdadeiro problema está no seu diretório de trabalho.
Eu acredito que o diretório de trabalho é
C:\Users\Administrator\Documents\Mibot\oops\
. Por favor, verifique o arquivo nomeadosocket.py
neste diretório. Depois de encontrá-lo, renomeie ou mova-o. Quando você importa o soquete,socket.py
o diretório atual é usado em vezsocket.py
do diretório do Python. Espero que isso tenha ajudado. :)Nota: Nunca use os nomes de arquivo do diretório Python para salvar o nome do arquivo do seu programa; entrará em conflito com o (s) seu (s) programa (s).
fonte
socket.py
. Bem, isso estava causando exatamente a mesma mensagem de erro. Esta página me colocou no caminho certo: python-notes.curiousefficiency.org/en/latest/python_concepts/…Ao configurar um ponto de entrada console_scripts em setup.py, descobri que esse problema existia quando o nó de extremidade era um módulo ou pacote e não uma função dentro do módulo.
Por exemplo
Deveria ter ficado
Para que se referisse a uma função que pode ser chamada, e não ao próprio módulo. Parece não fazer diferença se o módulo tiver um
if __name__ == '__main__':
bloco. Isso não tornará o módulo passível de chamada.fonte
Eu acho que você substituiu a função / variável interna ou algo mais "module" configurando a variável global "module". basta imprimir o módulo e ver o que há nele.
fonte
verifique as instruções de importação, pois um módulo não pode ser chamado. No Python, tudo (incluindo funções, métodos, módulos, classes etc.) é um objeto.
fonte
Uma maneira simples de resolver esse problema é exportar o
PYTHONPATH
ambiente variável. Por exemplo, para Python 2.6 no Debian / GNU Linux:Em outros sistemas operacionais, você primeiro encontraria o local deste módulo ou do
socket.py
arquivo.fonte