2016-05-04 18 views
-1

これは、一部の.cファイルのパラメータが使用されていないかどうかを判断できる部分的なコードです。メソッドを呼び出すときのValueError

だから、最初、それはtheParamが同じ名前のパラメータを検索するための検索語として使用される場合、呼び出される(その後、それらの値を読んで)されたパラメータ名を検索し、theParam、その後searchAndValueExtractとして保存します

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 

私はコンパイルエラー

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

私の周りで検索しましたが、何も私はそれを理解する助けていない、または私は単純に溶液が私の場合で実施することができる方法を把握しておりませんを取得します。

+0

これは 'a、b = fn()'を置いたときに起こりますが、 'fn()'は1つの値しか返しません。例えば。 'compareValue、parameterCounter = searchAndValueExtract(...)' – khelwood

+0

@khelwood - 下記の私のコメントを読んでください。 –

答えて

2

関数searchAndValueExtractは単一の値を返しますが、戻り値を2つの変数に代入しようとします。

def searchAndValueExtract(theParam, compareValue, parameterCounter, savedValue): 
    ... 
     return compareValue 
    return parameterCounter 

. 
. 
. 

compareValue, parameterCounter = searchAndValueExtract(theParam, compareValue, 
                 parameterCounter, savedValue) 
+0

どうすれば解決できますか? 'compareValue'は明らかに' parameterCounter'よりはるかに頻繁に返されています - しかし、私はまだそれらがメソッドの外で使われることになっているときに返されることを望みます。 –

関連する問題