I am getting that exception from this code:
class Transaction:
def __init__ (self):
self.materials = {}
def add_material (self, m):
self.materials[m.type + m.purity] = m
def serialize (self):
ser_str = 'transaction_start\n'
for k, m in self.materials:
ser_str += m.serialize ()
sert += 'transaction_end\n'
return ser_str
The for line is the one throwing the exception. The ms are Material objects. Anybody have any ideas why?
self.materialsis adictand by default you are iterating over just the keys (which are strings).Since
self.materialshas more than two keys*, they can’t be unpacked into thetuple“k, m“, hence theValueErrorexception is raised.In Python 2.x, to iterate over the keys and the values (the
tuple“k, m“), we useself.materials.iteritems().However, since you’re throwing the key away anyway, you may as well simply iterate over the dictionary’s values:
In Python 3.x, prefer
dict.values()(which returns a dictionary view object):