2016-10-15 2 views
0

Ich bekomme diese Ausnahme aus dem folgenden Code und hauptsächlich die zweite Zeile in der While-Schleife bilden, bitte einen Hinweis? Vielen Dank.Python ValueError: zu viele Werte in einer While-Schleife zu entpacken

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 

bekam ich diesen Fehler

, Linie 740, in SampleLvl Werte, samples_time = self.fn.SampleLvl (inds = inds, M = curM) Valueerror: zu viele Werte

auspacken
+0

Bitte schreiben Sie den Fehler unter dem Code – jamylak

+1

Vielleicht, weil Ihre Funktion 4 Werte zurückgibt, aber Sie versuchen, es nur 2 Variablen zuzuweisen? – UnholySheep

+0

Welche Art von Fehler? –

Antwort

0

Sie erhalten eine ValueError: too many values to unpack, wenn Sie versuchen, mehr Variablen in weniger Variablen zuzuweisen.

Zum Beispiel, wenn Sie eine Funktion foo() haben die zurück (a, b, c) Sie tun können: a, b, c = foo() aber man würde einen Fehler, wenn man versucht, a, b = foo() zu tun, wie die Funktion mehr Variablen gibt, als Sie zuweisen möchten.

Sie tun dies hier:

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

hoffe, das hilft!

0

In dieser Zeile:

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

Sie das Ergebnis der SampleLvl-2 Variablen zuweisen, aber Ihre Funktion, SampleLvl, die Sie scheinbar rekursiv in dieser Zeile aufrufen, gibt ein 4-Tupel zurück. Ich nehme an, dass self.fn.SampleLvl die gleiche Funktion ist, die Sie bereits sind. Wenn das der Fall ist, haben Sie auch den mods Parameter im Anruf weggelassen.

Eine weitere Bemerkung ist, dass ein bisschen mehr Kontext nützlich wäre. Ich nehme nur an, dass es nur einen gibt SampleLvl, also self==self.fn, aber es kann tatsächlich 2 verschiedene Funktionen mit dem gleichen Namen beteiligt sein, die, ohne Kontext, finde ich verwirrend.

Verwandte Themen