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?

Mengomentari pertanyaan (1)

socket adalah modul, yang berisi kelas socket.

Yang perlu anda lakukan socket.soket(...) atau dari soket impor soket:

>>> import socket
>>> socket

>>> socket.socket

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

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:

  • "Hmm, 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?"
  • "Oh, aku'm panggilan socket. Yang harus callable! Aku bertanya-tanya jika variabel socket adalah apa yang aku pikirkan?`
  • cetak socket
Komentar (8)

Asumsikan bahwa isi YourClass.py adalah:

class YourClass:
    # ......

Jika anda menggunakan:

from YourClassParentDir import YourClass  # means YourClass.py

Dengan cara ini, aku punya TypeError: 'modul' objek tidak callable jika anda kemudian mencoba untuk menggunakan YourClass().

Tapi, jika anda menggunakan:

from YourClassParentDir.YourClass import YourClass   # means Class YourClass

atau menggunakan YourClass.YourClass(), itu bekerja untuk saya.

Komentar (2)

Menambah utama __init__.py di YourClassParentDir, misalnya:

from .YourClass import YourClass

Kemudian, anda akan memiliki sebuah instance dari kelas anda siap ketika anda impor ke script lain:

from YourClassParentDir import YourClass
Komentar (1)

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:

from mypackage.bin import myscript
...
myscript(...)

ketika saya zag yang dibutuhkan untuk melakukan hal berikut:

from mypackage.bin.myscript import myscript
...
myscript(...)

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:

setup.py
scripts/
      script1
mypackage/
   bin/
      script1.py
   subpackage1/
   subpackage_etc/

Jika hal ini tidak sesuai dengan standar, silakan beritahu saya.

Komentar (0)

Sepertinya apa yang anda've dilakukan adalah impor socket modul impor soket. Oleh karena itu socket adalah modul. Anda juga perlu untuk mengubah garis itu untuk diri sendiri.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM), serta sejumlah penggunaan lainnya dari socket modul, atau mengubah pernyataan impor untuk socket impor soket.

Atau anda've punya impor soket setelah dari soket impor *:

>>> 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
Komentar (4)

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 bernama socket.py di direktori ini. Setelah anda menemukannya, mengubah nama atau memindahkan itu. Ketika anda mengimpor socket, socket.py dari direktori saat ini digunakan sebagai pengganti socket.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).

Komentar (1)

Cara sederhana untuk memecahkan masalah ini adalah eksporPYTHONPATH variabel lingkungan. Misalnya, untuk Python 2.6 di Debian/GNU Linux:

export PYTHONPATH=/usr/lib/python2.6`

Di sistem operasi lain, anda akan menemukan lokasi dari modul ini atau socket.py file.

Komentar (0)

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.

Traceback (most recent call last):
   File "/Users/ubuntu/.virtualenvs/virtualenv/bin/mycli", line 11, in 
load_entry_point('my-package', 'console_scripts', 'mycli')()
TypeError: 'module' object is not callable

Misalnya

from setuptools import setup
setup (
# ...
    entry_points = {
        'console_scripts': [mycli=package.module.submodule]
    },
# ...
)

Seharusnya

from setuptools import setup
setup (
# ...
    entry_points = {
        'console_scripts': [mycli=package.module.submodule:main]
    },
# ...
)

Sehingga akan merujuk ke callable fungsi daripada modul itu sendiri. Hal itu tampaknya tidak membuat perbedaan jika modul memiliki if __name__ == &#39;__utama__&#39;: blok. Ini tidak akan membuat modul callable.

Komentar (0)

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.

Komentar (0)