“ValueError:在迭代列表列表时解包”python异常的值太多了

时间:2016-12-14 17:59:26

标签: python debugging exception

我正在尝试构建一个操作函数的程序(练习) - 显示有关当前激活函数的消息,获取激活函数所需的必要参数的输入,具体取决于参数的类型和数量,并激活它。

尝试运行时,我收到以下异常: ValueError:解压缩的值太多(预期为3)

代码:

s = ['Q4', 'Q5a', 'Q5b', 'Q5c', 'Q5d', 'Q6']
f = [Trapez_rule, myFilter, myFilterMulti, myPrime, isFib, repeated]
inp = [['function', 'boundry a', 'boundry b', 'parts'], ['list', 'function'], ['list', 'list of functions'], ['number'], ['number'], ['function', 'number']]
reqtype = [['f', 'n', 'n', 'n'], ['l', 'f'], ['l', 'lf'], ['n'], ['n'], ['f', 'n']]

for j, k, l in f, inp, reqtype: # for i, j, k, l in s, f, inp, reqtype:
    # print(i)
    print(j.__doc__)
    lst = []
    for w, r in k, l:
        print(w)
        if r == 'f':
            x = input()
            x = 'lambda x: '
            exec(x)
            lst.append(x) # 'x'
        elif r == 'n':
            x = input()
            lst.append(x)
        elif r == 'l':
            m = []
            x = 0
            while x != -1:
                x = input()
                m.append(x)
            lst.append(m)
        elif r == 'lf':
            m = []
            x = 0
            while x != -1:
                x = input()
                x = 'lambda x: '
                exec(x)
                m.append(x)
            lst.append(m)
    execfunc = 'j('
    for q in range(len(lst) - 1):
        execfunc += lst[q] + ', '
    execfunc += lst[q] + ')'
    exec(execfunc)

我无法理解如何修复代码,但我认为原因是使用嵌套列表作为循环索引。

1 个答案:

答案 0 :(得分:1)

我相信你对这条线的作用感到困惑:

for j, k, l in f, inp, reqtype:

我相信您希望在第一次迭代中,j将采用f中的第一个值,k将采用inp中的第一个值,并且l将采用reqtype中的第一个值。在第二次迭代中,jkl中的每一个都将采用finpreqtype的第二个值分别。

这不是它的作用。

请改为尝试:

for j, k, l in zip(f, inp, reqtype):

Zip在Python Standard Library文档here中有所描述。