【问题标题】:Python ValueError: too many values to unpack in a While loopPython ValueError:在 While 循环中解包的值太多
【发布时间】:2016-10-15 17:16:13
【问题描述】:

我从下面的代码中得到了这个异常,主要是在 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:解压的值太多

【问题讨论】:

  • 请把错误贴在代码下面
  • 什么样的错误?
  • 可能是因为您的函数返回 4 个值,但您尝试将其仅分配给 2 个变量?
  • 我很惊讶,这是你得到的唯一错误!

标签: python python-2.7


【解决方案1】:

当您尝试将更多变量分配给更少的变量时,您将获得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)

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    在这一行:

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

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

    另外一点是,多一点上下文会很方便。我只是假设只有一个SampleLvl,所以self==self.fn,但实际上可能涉及两个同名的不同函数,如果没有上下文,我会感到困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-16
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多