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.
Antworten
Düark

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

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

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

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

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

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 !
Antworten