810 Stimmen

TypeError: Das Objekt 'module' ist nicht aufrufbar

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

Warum erhalte ich diese Fehlermeldung? Ich bin verwirrt.

Was müssen Sie wissen, um meine Frage zu beantworten?

25 Stimmen

Ich habe diesen Fehler einmal bekommen, weil ich sowohl eine (globale) Variable als auch eine Funktion mit demselben Namen hatte.

2 Stimmen

Ich erhielt diese Fehlermeldung mit dem Dateinamen random.py im gleichen Ordner, in dem ich eine zuvor funktionierende ipynb-Datei hatte. Ich änderte den Namen der Datei in random_function.py und startete das Jupyter-Notebook neu. Der Fehler verschwand. Um zu testen, ob der Name random.py das Problem war, änderte ich die Datei random_function.py wieder in random.py. Das Problem trat wieder auf. Benennen Sie Ihre Datei nicht nach dem Namen einer Python-Bibliothek.

810voto

Katriel Punkte 115208

socket ist ein Modul, das die Klasse socket .

Sie müssen Folgendes tun socket.socket(...) o 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'>

Dies ist die Bedeutung der Fehlermeldung:
Dort heißt es module object is not callable denn Ihr Code ruft eine Modul Objekt. Ein Modulobjekt ist das, was Sie erhalten, wenn Sie ein Modul importieren. Was Sie versucht haben, ist der Aufruf eines Klasse Objekt innerhalb des Modulobjekts, das zufällig denselben Namen hat wie das Modul, das es enthält.

Hier ist eine Möglichkeit, diese Art von Fehlern logisch aufzuschlüsseln:

  • " module object is not callable . Python meldet mir, dass mein Code versucht, etwas aufzurufen, das nicht aufgerufen werden kann. Was versucht mein Code aufzurufen?"
  • "Der Code versucht, die socket . Das sollte aufrufbar sein! Ist die Variable socket das ist, wofür ich es halte?`
  • Ich sollte ausdrucken, was die Steckdose ist, und überprüfen print socket

0 Stimmen

Ich bin derzeit imporitng Socket wie folgt: from socket import *

1 Stimmen

Ich habe es auch in from socket import socket geändert und erhalte immer noch den gleichen Fehler.

0 Stimmen

@user: wenn Sie das tun print socket werden Sie sehen, dass der Name socket ist ein Modul. Es muss an dieses Modul gebunden worden sein irgendwo ! Lesen Sie Ihren Code sorgfältig durch und ich bin sicher, Sie werden eine import socket oder etwas Ähnliches, wo man es nicht erwartet.

341voto

Bowen Xu Punkte 3456

Nehmen wir an, dass der Inhalt von DeineKlasse.py ist:

class YourClass:
    # ......

Wenn Sie verwenden:

from YourClassParentDir import YourClass  # means YourClass.py

Auf diese Weise erhalten Sie TypeError: Das Objekt 'module' ist nicht aufrufbar wenn Sie dann versuchen, die YourClass() .

Aber, wenn Sie verwenden:

from YourClassParentDir.YourClass import YourClass   # means Class YourClass

oder verwenden YourClass.YourClass() funktioniert es.

3 Stimmen

Class = YourClass.YourClass()

7 Stimmen

Ich habe dieses Problem gelöst, indem ich from yourClass import *

1 Stimmen

Beste Antwort, ich muss mehr in die Namespaces-Importe in Python schauen

135voto

Jose Alban Punkte 6403

Zum Hauptmenü hinzufügen __init__.py in YourClassParentDir, z. B.:

from .YourClass import YourClass

Dann haben Sie eine Instanz Ihrer Klasse bereit, wenn Sie sie in ein anderes Skript importieren:

from YourClassParentDir import YourClass

6 Stimmen

Müsste es nicht heißen from .YourClass import YourClass im __init__.py Datei ?

58voto

Deekshith Anand Punkte 1328

Kurze Antwort: Sie rufen eine Datei/ein Verzeichnis als Funktion statt als echte Funktion auf

Lesen Sie weiter:

Diese Art von Fehler tritt auf, wenn Sie ein Modul importieren, es als Funktion betrachten und aufrufen. In Python ist ein Modul also eine .py-Datei. Pakete (Verzeichnisse) können auch als Module betrachtet werden. Sagen wir, ich habe ein erstellen.py Datei. In dieser Datei habe ich eine Funktion wie diese:

#inside create.py
def create():
  pass

Wenn ich nun in einer anderen Codedatei Folgendes tue:

#inside main.py file
import create
create() #here create refers to create.py , so create.create() would work here

Es gibt diesen Fehler, da ich die Datei create.py als Funktion aufrufe. Ich muss also Folgendes tun:

from create import create
create() #now it works.

38voto

zerocog Punkte 1444

Hier ist ein weiteres Problem, das ich auch nach dem Lesen dieser Beiträge erst nach einer Weile erkannt habe. Ich war ein Skript zum Aufrufen meiner Python bin Skripte einrichten. Ich war immer das Modul nicht aufrufbar zu.

Mein Zig war, dass ich Folgendes tat:

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

als mein Zag Folgendes tun musste:

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

Zusammenfassend lässt sich sagen, dass Sie Ihre Paket- und Modulverschachtelung überprüfen sollten.

Was ich versuche, ist ein Skript-Verzeichnis, das nicht die *.py-Erweiterung hat, und immer noch die "bin"-Module in mypackage/bin sein und diese haben meine *.py-Erweiterung. Ich bin neu in der Paketierung und versuche, den Standards zu folgen, wie ich sie interpretiere. Also, ich habe bei der Einrichtung Root:

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

Sollte dies nicht der Norm entsprechen, lassen Sie es mich bitte wissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X