TypeError: 'module' objeto não pode ser chamado

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

Porque é que estou a receber este erro? I'estou confuso.

O que você precisa saber para responder a minha pergunta?

O socket é um módulo, contendo a classe socket.

Você precisa fazer socket.socket(....) ou de soquete de importação de soquete:

>>> import socket
>>> socket

>>> socket.socket

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

Note que o erro aqui é bastante fácil de entender: se objeto módulo não é chamável, você provavelmente está chamando um objeto módulo! O que'é um objeto módulo? It'é o tipo de coisa que você obtém quando importa um módulo.

Mas mesmo que você não'não entenda isso (o que é bom, é's muitas vezes confundindo que classes, módulos, funções etc. são todos apenas objetos como tudo mais), lá's é uma maneira bem fácil de começar a depurar:

  • "Hmm, objeto modulo não é chamável. Isso soa como I'estou tentando chamar algo que você pode't chamar. Pergunto-me o que eu'estou a tentar chamar?"
  • "Oh, eu'estou a chamar 'socket'. Isso deve ser chamável! Será que a variável socket é o que eu penso que é?``.
  • "soquete de impressão".
Comentários (8)

Parece que o que você've fez é importar o módulo socket como import socket. Portanto, o socket é o módulo. Você precisa mudar essa linha para self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM), assim como qualquer outra utilização do módulo socket, ou mudar a instrução de importação para `from socket import socket'.

Ou você'tem um "socket de importação" após a sua "importação do socket *":

>>> 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
Comentários (4)

Eu sei que este tópico tem um ano, mas o verdadeiro problema está no seu directório de trabalho.

Acredito que o diretório de trabalho é "C:{C:}UsuáriosAdministradorDocumentosMibotoops. Por favor, verifique o arquivo chamadosocket.pyneste diretório. Assim que o encontrar, renomeie ou mova-o. Quando você importa o socket,socket.pydo diretório atual é utilizado ao invés dosocket.py` do diretório Python's. Espero que isto tenha ajudado. :)

Nota: Nunca use os nomes dos arquivos do diretório Python's para salvar seu programa's; isso irá conflitar com o(s) seu(s) programa(s).

Comentários (1)