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
Neden bu hatayı alıyorum? Kafam karıştı.
Sorumu yanıtlamak için ne bilmeniz gerekiyor?
soket,
socket` sınıfını içeren bir modüldür.
Yapmanız gereken socket.socket(...)
veya 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'>
Buradaki hatayı anlamanın oldukça kolay olduğuna dikkat edin: `modül nesnesi çağrılabilir değilse', muhtemelen bir modül nesnesini çağırıyorsunuzdur! Modül nesnesi nedir? Bir modülü içe aktardığınızda elde edeceğiniz türden bir şeydir.
Ancak bunu anlamasanız bile (ki sorun değil, sınıfların, modüllerin, fonksiyonların vb. diğer her şey gibi sadece nesneler olması genellikle kafa karıştırıcıdır), hata ayıklamaya başlamanın oldukça kolay bir yolu vardır:
modül nesnesi çağrılabilir değil
. Bu, çağıramayacağınız bir şeyi çağırmaya çalışıyormuşum gibi geliyor. Acaba neyi çağırmaya çalışıyorum? "socket
çağırıyorum. Bu çağrılabilir olmalı! Acaba socket
değişkeni düşündüğüm şey mi?print socket
Görünüşe göre yaptığınız şey socket
modülünü import socket
olarak içe aktarmak. Bu nedenle socket
modüldür. Ya bu satırı self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
olarak ve socket
modülünün diğer her kullanımında olduğu gibi değiştirmeniz ya da import ifadesini from socket import socket
olarak değiştirmeniz gerekir.
Ya da from socket import *
öğenizden sonra bir import socket
öğeniz var:
>>> 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
Bu başlığın bir yıllık olduğunu biliyorum, ancak asıl sorun çalışma dizininizde.
Çalışma dizininin C:\Users\Administrator\Documents\Mibot\oops\
olduğuna inanıyorum. Lütfen bu dizinde socket.py
adlı dosyayı kontrol edin. Bulduğunuzda yeniden adlandırın veya taşıyın. Soketi içe aktardığınızda, Python'ın dizinindeki socket.py
yerine geçerli dizindeki socket.py
kullanılır. Umarım bu yardımcı olmuştur. :)
Not: Programınızın dosya adını kaydetmek için asla Python'un dizinindeki dosya adlarını kullanmayın; program(lar)ınızla çakışacaktır.