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つのリストを返しています。しかし、それを受け取るpset1pset2は2つしかないため、「too many values to unpack」エラーが発生します。

この問題を解決するには、yieldAllCombos関数が返す各要素を適切に受け取る必要があります。以下のように修正することでエラーを解消できます。

for pset1, pset2 in yieldAllCombos(items):
    # do something with pset1 and pset2

このように、yieldを使用する際は、返す値の数と受け取る変数の数が一致することを確認しましょう。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です