2016-06-10 8 views
0

Ich habe eine Klasse, um die Config-Sachen meines Programms zu umhüllen. Aber wenn ich versuche ich so in ipython zu testen: Python: Kein Wert für Argument 'Dateinamen' in ungebundenen Methodenaufruf

c = Config(test.cfg) 

bekomme ich den Fehler:

"TypeError: read() missing 1 required positional argument: 'filenames' 
" 

Aber ich Pylint diesen Fehler in meinem Emacs wirft:

"No value for argument 'filenames' in unbound method call" 

Ich denke, der Fehler adbove ist der Grund des Fehlers darüber. Aber ich weiß nicht warum. Ich denke, die Methode ist Anruf gebunden, da ich selbst als Referenz verwendet, aber ich bin nicht sicher, und ich verstehe nicht, warum es cfg als Parameter nicht akzeptiert.

Das ist meine Klasse:

from configparser import ConfigParser 

class Config: 
    """Wrapper around config files 
    Args: 
     cfg: main config file 
    """ 
    def __init__(self, cfg=None): 
     self.cfg = [] 
     self.cfgraw = cfg 
     self.scfgs = [] 
     self.scfgs_raw = [] 
     if not cfg is None: 
      self.add(typ="main", cfg=cfg) 


    def add(self, typ, cfg): 
     """add config file 
     Args: 
      typ: type of file main or sub 
     Returns: 
      none 
     """ 
     if typ is not "main" and cfg is None: 
      raise ValueError('no file provied and type not main') 

     if typ is "sub": 
      for index in range(len(self.scfgs)): 
       self.scfgs[index] = ConfigParser 
       self.scfgs[index].read(cfg) 

     if typ is "main": 
      self.cfg = ConfigParser 
      self.cfg.read(cfg) 
    def write(self, typ=None, index=None): 
     """write changes made 
     Args: 
      typ: type of target file 
      index: if type is sub add index to write selected file 
     Returns: 
      none 
     """ 
     if typ is "main": 
      self.cfg.write(self.cfgraw) 
     if typ is "sub": 
      if index is None: 
       for item in range(len(self.scfgs)): 
        self.scfgs[item].write(self.scfgs_raw[item]) 
      else: 
       self.scfgs[item].write(self.scfgs_raw[item]) 

Antwort

3

Sie ConfigParser nicht instanziiert, wenn Sie es an die self.scfgs oder self.cfg Attribute zuweisen; Wenn Sie dann read aufrufen, rufen Sie eine ungebundene Methode über die Klasse und nicht eine Methode für die Instanz auf.

Es sollte:

self.cfg = ConfigParser() 

etc

3

Sie initialisieren Ihr nicht ConfigParser korrekt auf der Linie vor dem read - Sie () fehlen tatsächlich eine Instanz zu erstellen.

Versuchen:

if typ is "main": 
    self.cfg = ConfigParser() 
    self.cfg.read(cfg) 
Verwandte Themen