Probleme mit Klassenaufruf - "Object is not callable&am

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Düark

Probleme mit Klassenaufruf - "Object is not callable&am

Beitragvon Düark » Donnerstag 14. Oktober 2004, 10:52

Hallo, bin noch ein ziemlicher Neuling, also verzeiht mir bitte diese warscheinlich recht simple Frage:

Ich habe eine Klasse zum durchsuchen von Directories und Filtern bestimmter Dateien aus diesen.
Sieht ungefähr so aus:

Code: Alles auswählen

import os, string, sys

class DirParser:
   
    def __init__(self, sourcedir):
        self.sourcedir=sourcedir
        self.filename=""
        self.fileList=[]
       
    def getFiles(self, filename):
        self.searchInDirectory(self.sourcedir)
        return self.fileList
   
        #search all index.xml-files in our directory
    def searchInDirectory(self, sPath):
   #create a list with current directory
        try:
            lDirContent=os.listdir(sPath)
           
        # in case of an error (e.g. permission denied), leave function
        except WindowsError, e:
            print e
            return   
                lDirContent=lDirList+lFileList       

        #go through the entries in our directory-list   
        for x in lDirContent:
            sLookIn=os.path.join(sPath,x)
           
            #if this is a directory, call function recursive to traverse
            if os.path.isdir(sLookIn):
                self.searchInDirectory(sLookIn)
               
            # if this is an index-file
            elif sLookIn==sPath+"\\index.xml":   
                print "Parsing File: "+sLookIn
                self.fileList.append(sLookIn)

Das wollte ich jetzt aus einem anderen Script wie folgt aufrufen:

Code: Alles auswählen

import DirParser

myDirs=DirParser("c:\\files")
filelist=myDirs.getFiles("index.xml")
print filelist


Und dabei bekomme ich folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\PROGRA~1\Python22\lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 301, in RunScript
    exec codeObject in __main__.__dict__
  File "C:\myPython\teststart.py", line 3, in ?
    myDirs=DirParser("c:\\files")
TypeError: 'module' object is not callable


Wenn ich die Scripte in eine Datei packe, gehts...
Weiss jemand Rat?
Düark

Beitragvon Düark » Donnerstag 14. Oktober 2004, 10:56

dieses komisch eingerückte
lDirContent=lDirList+lFileList

in:

Code: Alles auswählen

...
       print e
            return   
                lDirContent=lDirList+lFileList       

        #go through the entries in our directory-list   
...
       

bitte nicht beachten :)
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Donnerstag 14. Oktober 2004, 10:58

Hi. Der Fehler sagt ja schon alles: TypeError: 'module' object is not callable . Du willst nicht die Klasse, sondern das Modul rufen :wink: . Lösung: einfach die Klasse als Bestandteil des Moduls ansprechen.

Code: Alles auswählen

import DirParser

myDirs=DirParser.DirParser("c:\\files")
filelist=myDirs.getFiles("index.xml")
print filelist

Oder du lässt den Code so stehen und sorgst dafür, dass auch gleich die Klasse aus dem Modul geladen wird: from DirParser import DirParser .

mfg Milan
Düark

Beitragvon Düark » Donnerstag 14. Oktober 2004, 11:04

Ich liebe dieses Forum... wie lange hat das jetzt gedauert ? 2 min ? :)

Das hatte ich auch schon probiert, bekam dann aber folgende Meldung:
TypeError: __init__() takes exactly 3 arguments (2 given)

Dabei nimmt init doch nur 2 Argumente und ok, ich gebe nur eins, aber ich dachte das mit dem self geht schon in ordnung...
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Donnerstag 14. Oktober 2004, 11:20

Düark hat geschrieben:Dabei nimmt init doch nur 2 Argumente und ok, ich gebe nur eins, aber ich dachte das mit dem self geht schon in ordnung...

Dachte ich auch. mach mal in der Konsole das hier:

Code: Alles auswählen

>>> import DirParser
>>> help(DirParser.DirParser)

Eventuell funkt da ein anderes Modul dazwischen oder du hast ne veraltete Version davon auf der Platte und die neue net gespeichert...
Düark

Beitragvon Düark » Donnerstag 14. Oktober 2004, 11:27

Ja, daran lag es wirklich, eigentlich komisch weil ich die neue gespeichert hatte. Erst nachdem ich das Script von der Platte gelöscht hatte und neu gespeichert hatte, hat er das benutzt... komisch...

Vielen Dank, Milan !

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder