Python ValueError:在While循环中解压缩的值太多

时间:2016-10-15 08:47:55

标签: python python-2.7

我从以下代码中获取此异常,并且主要在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

我收到了这个错误

SampleLvl中的

,第740行     values,samples_time = self.fn.SampleLvl(inds = inds,M = curM) ValueError:要解压缩的值太多

2 个答案:

答案 0 :(得分:0)

在这一行:

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

您将SampleLvl的结果分配给2个变量,但是您似乎在该行中递归调用的函数SampleLvl返回一个4元组。 我认为self.fn.SampleLvl与您已经完成的功能相同。 如果是这种情况,您也在通话中省略了mods参数。

另一个评论是,更多的上下文会很方便。我只是假设只有一个SampleLvl,所以self==self.fn,但实际上可能有两个不同的函数,涉及相同的名称,没有上下文,我觉得很混乱。

答案 1 :(得分:0)

当您尝试将更多变量分配给较少的变量时,您将获得ValueError: too many values to unpack

例如,如果您有一个返回foo()的函数(a, b, c),您可以执行:a, b, c = foo()但如果您尝试a, b = foo()作为函数返回的变量多于您尝试分配的变量。

你在这里这样做:

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

希望这有帮助!