TypeError: 'modul' obiectul nu este apelabilă

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

De ce primesc aceasta eroare? Am'm confuz.

De ce ai nevoie să știi să-mi răspunzi la întrebare?

Comentarii la întrebare (1)

priza este un modul, care conține clasa priza.

Aveți nevoie pentru a face priza.socket (...) " sau " de la priza de import socket`:

>>> import socket
>>> socket

>>> socket.socket

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

Observați că eroarea aici este destul de ușor de înțeles: dacă modulul obiect nu este apelabilă`, vă sunt, probabil, de asteptare un modul obiect! Ce's un modul obiect? L's genul de lucru pe care îl obține atunci când importați un modul.

Dar, chiar dacă tu nu't înțeleagă că (ceea ce este bine, l's de multe ori confuze care clase, module, funcții, etc sunt doar obiecte, cum ar fi orice altceva), nu's o modalitate destul de ușor pentru a începe de depanare:

  • "Hmm, module obiect nu este apelabilă. Asta sună ca și cum am'm încercat să sune ceva pe care le poate't sun. Mă întreb ce-am'm încercat să sun?"
  • "Oh, am'm a sunat priza. Care ar trebui să fie apelabile! Mă întreb dacă variabila priza este ceea ce cred eu că este?`
  • print socket
Comentarii (8)

Să presupunem că conținutul YourClass.py este:

class YourClass:
    # ......

Dacă utilizați:

from YourClassParentDir import YourClass  # means YourClass.py

În acest fel, am TypeError: 'modul' obiectul nu este apelabilă dacă ați încercat apoi să folosesc YourClass()`.

Dar, dacă utilizați:

from YourClassParentDir.YourClass import YourClass   # means Class YourClass

sau de a folosi YourClass.YourClass(), funcționează pentru mine.

Comentarii (2)

Adauga la principaleleinit.py în YourClassParentDir, de exemplu:

from .YourClass import YourClass

Apoi, va avea o instanță a clasei gata atunci când importați într-un alt scenariu:

from YourClassParentDir import YourClass
Comentarii (1)

Aici este un alt prins, asta mi-a luat ceva timp să văd chiar și după ce a citit aceste posturi. Am fost crearea unui script pentru a apela mea python bin script-uri. Am fost obtinerea modulul nu nevărsat prea.

Mi zig fost că am fost de a face următoarele:

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

când mi-zag nevoie pentru a face următoarele:

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

În rezumat, verificați pachetul și modul de cuibărit.

Ceea ce încerc să fac este să aibă un directory script-uri care nu au .py extensie, și încă mai au 'bin' module pentru a fi în mypackage/bin și acestea au mi .py extensie. Sunt nou ambalaj, și încearcă să urmeze standardele cum sunt interpretarea ei. Deci, am la instalare root:

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

Dacă acest lucru nu este compatibil cu standardul, te rog, lasă-mă să știu.

Comentarii (0)

Se pare ca ceea ce ai'am făcut este importat socket modul ca import priza. Prin urmare, soclu este modulul. Aveți nevoie pentru a schimba linia de la sine.serv = socket.socket(soclu.AF_INET, socket.SOCK_STREAM), precum și orice altă utilizare asocketmodule, sau schimba declarația de import sădin priza de import priza`.

Sau'am un import socketdupăde la priza de 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 
TypeError: 'module' object is not callable
Comentarii (4)

Știu că acest subiect este vechi de un an, dar problema reală este în directorul de lucru.

Eu cred că directorul de lucru este C:\Users\Administrator\Documents\Mibot\oops`. Vă rugăm să verificați pentru fișier numit socket.py în acest director. Odată ce ați găsi, redenumi sau muta-l. Atunci când importați soclu,socket.pydin directorul curent este folosit în loc desocket.py de Python's director. Sper că acest lucru m-a ajutat. :)

Notă: Nu utilizați numele de fișier de Python's director pentru a salva programul's nume de fișier; acesta va intra în conflict cu programul dvs.(e).

Comentarii (1)

Un mod simplu de a rezolva această problemă este de a exportaPYTHONPATH variabil mediu. De exemplu, pentru Python 2.6 în Debian/GNU Linux:

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

În alte sisteme de operare, mai întâi a găsi locația de acest modul sau `socket.py dosarul lui.

Comentarii (0)

Atunci când configurați un console_scripts obtinerea a apărut în setup.py am gasit aceasta problema exista la momentul final de evaluare a fost un modul sau pachet, mai degrabă decât o funcție în cadrul modulului.

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

De exemplu

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

Ar fi fost

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

Așa că s-ar referi la o nevărsat funcție, mai degrabă decât modul în sine. Pare să nu fac nici o diferență dacă modulul are o dacă nume == 'principalele':` bloc. Acest lucru nu va face modulul nevărsat.

Comentarii (0)

Cred că trebuie înlocuite în funcție nativă/variabilă sau altceva "modulul" prin setarea variabilă globală "modulul". doar imprima modul de a vedea ce este în ea.

Comentarii (0)