Pythonでジェネレータを使用する際、yield
キーワードを使います。しかし、yield
が返す値の数と、それを受け取る変数の数が一致しないと、「too many values to unpack」というエラーが発生します。
例えば、以下のようなコードがあるとします。
def yieldAllCombos(items):
N = len(items)
for i in xrange(3**N):
combo1 = []
combo2 = []
for j in xrange(N):
if (i >> j) % 3 == 1:
combo1.append(items[j])
elif (i>>j) % 3 == 2:
combo2.append(items[j])
yield(combo1,combo2)
items = buildItems()
pset1,pset2=yieldAllCombos(items)
このコードでは、yieldAllCombos
関数が2つのリストを返しています。しかし、それを受け取るpset1
とpset2
は2つしかないため、「too many values to unpack」エラーが発生します。
この問題を解決するには、yieldAllCombos
関数が返す各要素を適切に受け取る必要があります。以下のように修正することでエラーを解消できます。
for pset1, pset2 in yieldAllCombos(items):
# do something with pset1 and pset2
このように、yield
を使用する際は、返す値の数と受け取る変数の数が一致することを確認しましょう。