TypeError: 'modul' objek tidak callable
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
Mengapa saya mendapatkan error ini? I'm bingung.
Apa yang anda perlu tahu untuk menjawab pertanyaan saya?
483
9
socket
adalah modul, yang berisi kelassocket
.Yang perlu anda lakukan
socket.soket(...)
ataudari soket impor soket
:Perhatikan bahwa kesalahan di sini adalah cukup mudah untuk memahami: jika
modul objek tidak callable
, anda mungkin memanggil modul objek! Apa's modul objek? It's jenis hal yang anda dapatkan ketika anda mengimpor modul.Tetapi bahkan jika anda don't memahami bahwa (yang baik-baik saja, itu's sering membingungkan bahwa kelas-kelas, modul, fungsi dll semua hanya benda-benda seperti segala sesuatu yang lain), ada's cara yang cukup mudah untuk memulai debug:
modul objek tidak callable
. Kedengarannya seperti saya'm mencoba untuk memanggil sesuatu yang dapat anda't call. Aku bertanya-tanya apa yang saya'm mencoba untuk menelepon?"socket
. Yang harus callable! Aku bertanya-tanya jika variabelsocket
adalah apa yang aku pikirkan?`cetak socket
Asumsikan bahwa isi YourClass.py adalah:
Jika anda menggunakan:
Dengan cara ini, aku punya TypeError: 'modul' objek tidak callable jika anda kemudian mencoba untuk menggunakan
YourClass()
.Tapi, jika anda menggunakan:
atau menggunakan
YourClass.YourClass()
, itu bekerja untuk saya.Menambah utama
__init__.py
di YourClassParentDir, misalnya:Kemudian, anda akan memiliki sebuah instance dari kelas anda siap ketika anda impor ke script lain:
Berikut ini adalah gotcha lain, yang butuh beberapa waktu untuk melihat bahkan setelah membaca posting ini. Saya sudah menyiapkan script untuk memanggil saya python bin script. Saya mendapatkan modul tidak callable juga.
Saya zig adalah bahwa saya melakukan hal-hal berikut:
ketika saya zag yang dibutuhkan untuk melakukan hal berikut:
Dalam ringkasan, double periksa paket dan modul yang bersarang.
Apa yang saya coba lakukan adalah script directory yang tidak memiliki .py ekstensi, dan masih memiliki 'bin' modul-modul yang akan di mypackage/bin dan ini telah saya .py ekstensi. Saya baru kemasan, dan berusaha untuk mengikuti standar-standar seperti saya menafsirkan mereka. Jadi, saya telah di setup root:
Jika hal ini tidak sesuai dengan standar, silakan beritahu saya.
Sepertinya apa yang anda've dilakukan adalah impor
socket
modulimpor soket
. Oleh karena itusocket
adalah modul. Anda juga perlu untuk mengubah garis itu untukdiri sendiri.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, serta sejumlah penggunaan lainnya darisocket
modul, atau mengubah pernyataan impor untuksocket impor soket
.Atau anda've punya
impor soket
setelahdari soket impor *
:Aku tahu thread ini adalah satu tahun, tapi masalah sebenarnya adalah pada direktori kerja anda.
Saya percaya bahwa direktori kerja adalah
C:\Users\Administrator\Documents\Mibot\oops\
. Silakan periksa file yang bernamasocket.py
di direktori ini. Setelah anda menemukannya, mengubah nama atau memindahkan itu. Ketika anda mengimpor socket,socket.py
dari direktori saat ini digunakan sebagai penggantisocket.py
dari Python's direktori. Semoga ini bisa membantu. :)Catatan: jangan Pernah menggunakan nama file dari Python's direktori untuk menyimpan program's file name; itu akan bertentangan dengan program anda(s).
Cara sederhana untuk memecahkan masalah ini adalah ekspor
PYTHONPATH
variabel lingkungan. Misalnya, untuk Python 2.6 di Debian/GNU Linux:Di sistem operasi lain, anda akan menemukan lokasi dari modul ini atau
socket.py
file.Ketika mengkonfigurasi sebuah console_scripts entrypoint di setup.py saya menemukan masalah ini ada ketika endpoint adalah modul atau paket lebih dari satu fungsi dalam modul.
Misalnya
Seharusnya
Sehingga akan merujuk ke callable fungsi daripada modul itu sendiri. Hal itu tampaknya tidak membuat perbedaan jika modul memiliki
if __name__ == '__utama__':
blok. Ini tidak akan membuat modul callable.Saya kira anda telah ditimpa builtin fungsi/variabel atau sesuatu yang lain "modul" dengan menetapkan variabel global "modul". hanya cetak modul melihat whats di dalamnya.