2016-05-04 16 views
-1

Dies ist ein partieller Code, der ermitteln können soll, ob ein Parameter in einigen .c-Dateien nicht verwendet wird oder nicht.ValueError beim Aufruf einer Methode

So zuerst, es findet einen Parameternamen und speichert es als theParam und dann searchAndValueExtract genannt wird, wo theParam als Suchwort verwendet wird, für Parameter mit identischen Namen zu suchen (und dann ihre Werte zu lesen)

import os 
savedValue = "" 
compareValue = "" 
theParam = "" 
usedParameters = list() 
equalValueCounter = 0 
parameterCounter = 0 
emptyline = "" 

def searchAndValueExtract(theParam, compareValue, parameterCounter, savedValue): 
     # when theParam has a value 
     # this method will be called to find an identical parameter and then grab it's value for comparison 
     for path, compdirs, compfiles in os.walk('C:/PATH'): 
      for compfile in compfiles: 
       if compfile.endswith('.c'): 
        with open(os.path.join(path, compfile), 'r') as r: 
         for line in r: 
          if '=' in line and theParam in line: 
           savedValue = value(row, line, savedValue, statements, cur) 
           compareValue = savedValue 
           parameterCounter += 1 
           return compareValue 
     return parameterCounter 

for root, dirs, files in os.walk('C:/PATH'): 
    for cFile in files: 
     if cFile.endswith('.c'): 
      with open(os.path.join(root, cFile), 'r') as this: 
       for row in this: 
        if '=' in row and row != emptyline: 
         theParam = takeTheParam(row, theParam) 
         savedValue = value(row, savedValue, statements, cur, line) 
         while theParam not in usedParameters: # Has the param already been checked? 
          safeValue = savedValue 
          compareValue, parameterCounter = \ 
           searchAndValueExtract(theParam, compareValue, parameterCounter, savedValue) 
          if safeValue == compareValue: 
           equalValueCounter += 1 
           continue 
          else: 
           usedParameters.append(theParam) 
           break 
         else: 
          break 

Wenn ich den Fehler kompilieren

File "C:/PATH/ParamChecker.py", line 82, in <module> 
    searchAndValueExtract(theParam, compareValue, parameterCounter, savedValue) 
ValueError: need more than 1 value to unpack 

ich herum gesucht haben, aber nichts hat mir geholfen, es zu verstehen, oder ich bin einfach nicht begreifen, wie die Lösung in meinem Fall umgesetzt werden könnten.

+0

Dies passiert, wenn Sie 'a, b = fn()' eingeben, aber 'fn()' gibt nur einen Wert zurück. Z.B. 'compareValue, parameterCounter = searchAndValueExtract (...)' – khelwood

+0

@khelwood - Bitte lesen Sie meinen Kommentar unten. –

Antwort

2

Die Funktion searchAndValueExtract gibt einen einzelnen Wert zurück, aber Sie versuchen, ihren Rückgabewert 2 Variablen zuzuordnen.

+0

Wie soll ich es lösen? 'compareValue' wird offensichtlich viel häufiger zurückgegeben als' parameterCounter' - allerdings möchte ich immer noch beide zurückgeben, wenn sie außerhalb der Methode verwendet werden sollen. –

Verwandte Themen