TypeError: 'module' nesnesi çağrılabilir değil

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

>>> socket.socket

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

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:

  • "Hmm, 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? "
  • "Oh, socket çağırıyorum. Bu çağrılabilir olmalı! Acaba socket değişkeni düşündüğüm şey mi?
  • print socket
Yorumlar (8)

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 
TypeError: 'module' object is not callable
Yorumlar (4)

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.

Yorumlar (1)