我正在为我的妻子写一个超级简单的代码,以便能够跟踪我们的家庭食品库存。我让它工作正常(从文本文件中提取项目并将项目写入其中),但后来我开始得到这个奇怪的错误。
Traceback (most recent call last):
File "C:/Users/USFBS/Desktop/Pantry_Inventory", line 24, in <module>
(val, key) = line.split()
ValueError: need more than 0 values to unpack
我的代码中没有更改任何内容,所以我对于可能导致此操作的原因感到非常困惑。我的代码如下:
def add_item():
item=raw_input("Add the name of the item that you would like to add __")
quantity=int(raw_input("Add the quantity of the item on hand __"))
pantry[item]=quantity
def print_pantry():
pantry_view = [ (v,k) for k,v in pantry.iteritems() ]
pantry_view.sort()
for v,k in pantry_view:
print "%s: %s" % (k,v)
def use_item():
item_used=raw_input("Which item did you use? __")
quantity_used=int(raw_input("How many did you use? __"))
pantry[item_used]-=quantity_used
pantry={}
pantry_file=open("pantry.txt","r+")
for line in pantry_file:
**(val, key) = line.split(" ")**
pantry[key] = int(val)
while True:
print_pantry()
print "What would you like to do?"
decider=int(raw_input("1:Add Item 2:Use Item 3:Exit _"))
if decider==3:
break
if decider==2:
use_item()
if decider==1:
add_item()
for i in pantry:
pantry_file.write(str(pantry[i])+" "+str(i)+"\n")
pantry_file.close
有关此问题的任何想法或建议有助于清除这一点或者至少帮助我理解为什么会发生这种情况会很棒(注意:我在我的代码中使用双星号表示粗体,这会引发错误供参考)。
答案 0 :(得分:0)
我怀疑你正在读取的文件中有一个空行(pantry.txt),当for循环到达这个空行时,循环变量'line'被赋予空字符串。
>>> ''.split()
[]
>>> a,b = ''.split()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 0 values to unpack
答案 1 :(得分:0)
您至少可以在两个不同的场合打开食品室文件来解决此问题。一个用于阅读,一个用于写作。通过这样做,您可以确保文件被覆盖而不会附加到。
读
with open("pantry.txt","w") as f:
for k, v in pantry.iteritems():
f.write('%d %s' % (v, k))
写
(val, key) = line.split(" ")
问题是您正在写回您读取的同一文件实例以及文件附加到的结果,您手动添加的换行符在文件中创建了空行。您的代码无法处理此问题,因为元组解包需要从每行的拆分中获取2个值。
{{1}}