ValueErrors:解包需要3个以上的值

时间:2017-09-01 18:03:59

标签: python excel python-2.7 python-3.x

此代码的目标是匹配year_linktla_2以及输出变量from_, to, digit, name2, min_value, max_value。我正在使用CSV文件,这是从中读取数据的位置。它发布在这里:Excel Sheet不幸的是我收到了这个错误:

Traceback (most recent call last):
File "C:/Users/RM/Desktop/win6.py", line 150, in <module>
for from_,to,digit,name2,min_value,max_value in voltage_envelopes[tla_2]:
ValueError: need more than 3 values to unpack.

-

data = list(csv.reader(open(LOAD_GEN_DATAFILE)))
year = raw_input(" ")
location=raw_input(" ")
for row in data:
    year_link, from_,to,digit,name2,tla_2,min_value,max_value,last_bus = row[7:16]
    year_link = year
    tla_2=location
    if year_link not in mydict:
        mydict[year_link]={}

    voltage_envelopes=mydict[year_link]

    if tla_2 not in voltage_envelopes:
        voltage_envelopes[tla_2]=[]

    voltage_envelopes[tla_2].append((from_,to,digit,name2,min_value,max_value))

if year_link in mydict and tla_2 in mydict[year_link]:
     voltage_envelopes=mydict[year_link]

     for from_,to,digit,name2,min_value,max_value in voltage_envelopes[tla_2]:
         from_=int(from_)
         to=int(to)
         min_value=float(min_value)
         max_value=float(max_value)
         digit=int(digit)

         output = 'From Bus #: {}\tTo Bus #: {}\t Area Station: {}\t VMIN: {} pu\tVMAX: {} pu\t' 
         print(output.format(from_, to,name2, min_value, max_value))
         print("\n")

        #_c=psspy.getdefaultchar()
        #_i=psspy.getdefaultint()
        #_f=psspy.getdefaultreal()
        #psspy.two_winding_chng_4(from_,to,'%d'% digit,[_i,_i,_i,_i,_i,_i,_i,_i,_i,_i,_i,_i,_i,_i,_i],[_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f, max_value, min_value,_f,_f,_f],[])
else:
    exit

2 个答案:

答案 0 :(得分:0)

目前,您要将一个6元素的元组附加到空列表中,这会产生一个仅包含一个元素的列表。这导致解包错误,因为Python期望6个元素序列。你可以做的一件事是用另一个6个元素的列表扩展列表。

更改

voltage_envelopes[tla_2].append((from_,to,digit,name2,min_value,max_value))

voltage_envelopes[tla_2].extend([from_,to,digit,name2,min_value,max_value])

答案 1 :(得分:0)

  

问题:ValueError:解包时需要3个以上的值。

您的示例代码按预期工作,无ValueError
检查您的代码时,如果您分配 6 值并解包 6 值,则无法获得此类错误:

voltage_envelopes[tla_2].
    append((from_,to,digit,name2,min_value,max_value))
...
        for from_,to,digit,name2,min_value,max_value in voltage_envelopes[tla_2]:

我假设问题中显示的示例代码中显示的Traceback 不是

将以下内容更改为捕获容易出错的数据行:

        #for from_, to, digit, name2, min_value, max_value in voltage_envelopes[tla_2]:
        for voltage in voltage_envelopes[tla_2]:
            if len(voltage) == 6:
                from_, to, digit, name2, min_value, max_value = voltage 
                ...
            else:
                print('[FAIL] Missing Data in "voltage"! Got {} values={} need 6 values!'.format(len(voltage), voltage))

使用Python测试:3.4.2