2016-10-15 11 views
0

この例外は次のコードから得られますが、主にwhileループの2行目を作成します。ありがとうございました。Python ValueError:Whileループでアンパックするには多すぎます

def SampleLvl(self, mods, inds, M): 
    calcM = 0 
    total_time = 0 
    p = np.arange(1, self.last_itr.computedMoments()+1) 
    psums_delta = _empty_obj() 
    psums_fine = _empty_obj() 
    while calcM < M: 
     curM = np.minimum(M-calcM, self.params.maxM) 
     values, samples_time = self.fn.SampleLvl(inds=inds, M=curM) 
     total_time += samples_time 

     delta = np.sum(values * \ 
         _expand(mods, 1, values.shape), 
         axis=1) 
     A1 = np.tile(delta, (len(p),) + (1,)*len(delta.shape)) 
     A2 = np.tile(values[:, 0], (len(p),) + (1,)*len(delta.shape)) 
     B = _expand(p, 0, A1.shape) 
     psums_delta += np.sum(A1**B, axis=1) 
     psums_fine += np.sum(A2**B, axis=1) 
     calcM += values.shape[0] 

    return calcM, psums_delta, psums_fine, total_time 

私はこのエラーを得た

、ライン740、SampleLvl 値で、samples_time = self.fn.SampleLvl(INDS = INDS、M = curM) とValueError:

を解凍するにはあまりにも多くの値この行で
+0

コードの下にエラーを投稿してください – jamylak

+1

あなたの関数が4つの値を返すが、2つの変数にのみ割り当てようとしている可能性がありますか? – UnholySheep

+0

どのようなエラー? –

答えて

0

より少ない変数に多くの変数を割り当てようとすると、ValueError: too many values to unpackが表示されます。例えば

、あなたはあなたができる(a, b, c)を返す関数foo()た場合:a, b, c = foo()をいますが、機能はあなたがに割り当てるしようとしているよりも多くの変数を返すようa, b = foo()を実行しようとしました場合は、エラーになるだろう。

あなたはここに次の操作を行います。このことができます

values, samples_time = self.fn.SampleLvl(inds=inds, M=curM) 

希望を!

0

:あなたはSampleLvl 2の変数の結果を代入

values, samples_time = self.fn.SampleLvl(inds=inds, M=curM) 

が、あなたの関数で、SampleLvlは、その行で再帰的に呼び出すように見えますが、4タプルを返します。 私はすでにself.fn.SampleLvlと同じ機能を持っているとします。 その場合、コールのmodsパラメータも省略しています。

もう1つ注意しておきたいのは、もう少しコンテキストが便利だということです。私はちょうどSampleLvlの1つしかないと仮定しているので、self==self.fnと同じ名前の2つの異なる関数があるかもしれませんが、コンテキストがなければ混乱します。

関連する問題