TypeError: 'moduł' obiekt nie jest wywoływalny

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

Dlaczego dostaję ten błąd? Jestem zdezorientowany.

Co musisz wiedzieć, aby odpowiedzieć na moje pytanie?

socket jest modułem, zawierającym klasę socket.

Musisz zrobić socket.socket(...) lub from socket import socket:

>>> import socket
>>> socket

>>> socket.socket

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

Zauważ, że błąd tutaj jest dość łatwy do zrozumienia: jeśli obiekt modułu nie jest wywoływalny, to prawdopodobnie wywołujesz obiekt modułu! Czym'jest obiekt modułu? Jest to typ rzeczy, którą otrzymujesz, gdy importujesz moduł.

Ale nawet jeśli tego nie rozumiesz (co jest w porządku, często jest to mylące, że klasy, moduły, funkcje itp. są po prostu obiektami, jak wszystko inne), jest całkiem prosty sposób na rozpoczęcie debugowania:

  • "Hmm, moduł object is not callable. Brzmi to tak, jakbym próbował wywołać coś, czego nie można wywołać. Zastanawiam się, co ja'próbuję wywołać?
  • "Och, ja'wołam socket. To powinno być callable! Zastanawiam się, czy zmienna socket jest tym, czym myślę, że jest?
  • print socket
Komentarze (8)

Wygląda na to, że to co zrobiłeś to zaimportowałeś moduł socket jako import socket. Dlatego socket jest tym modułem. Musisz albo zmienić tę linię na self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM), jak również każde inne użycie modułu socket, lub zmienić deklarację importu na from socket import socket.

Albo masz import socket po swoim 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
Komentarze (4)

Wiem, że ten wątek ma już rok, ale prawdziwy problem jest w twoim katalogu roboczym.

Wierzę, że katalog roboczy to C:\Użytkownicy \Administrator \Dokumenty \Mibot \. Proszę sprawdzić, czy w tym katalogu znajduje się plik o nazwiesocket.py. Gdy go znajdziesz, zmień nazwę lub przenieś go. Kiedy importujesz socket,socket.pyz bieżącego katalogu jest używany zamiastsocket.py` z katalogu Pythona's. Mam nadzieję, że to pomogło :)

Uwaga: Nigdy nie używaj nazw plików z katalogu Pythona'do zapisywania nazw plików Twojego programu' spowoduje to konflikt z Twoim programem(ami).

Komentarze (1)