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
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
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:
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ć?socket
. To powinno być callable! Zastanawiam się, czy zmienna socket
jest tym, czym myślę, że jest?print socket
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 <module>
TypeError: 'module' object is not callable
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 nazwie
socket.py. Gdy go znajdziesz, zmień nazwę lub przenieś go. Kiedy importujesz socket,
socket.pyz bieżącego katalogu jest używany zamiast
socket.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).