Pythonで開発中に突然出ることがある「ValueError: too many values to unpack」。初心者にとっては分かりにくいこのエラーですが、実はリストや辞書の使い方に少し注意するだけで簡単に解決できます。
目次
ValueError: too many values to unpack の意味とは?
このエラーは日本語に訳すと「アンパックしようとしたけど、変数の数より値の数が多すぎる」という意味です。
Pythonでは、次のようにリストやタプルを複数の変数に割り当てることができます:
|
1 |
name, age = ["Alice", 25] |
これはOKですが、もし値が3つあるリストを2つの変数に代入しようとすると…
|
1 |
name, age = ["Alice", 25, "Tokyo"] |
この時に出るのが「ValueError: too many values to unpack」です。
このエラーが出る原因3つ
1. 変数の数よりリスト(やタプル)の要素が多い
もっともよくある原因です。リストの中に3つ以上の値があるのに、2つの変数に代入しようとするとエラーになります。
2. forループでアンパックする時に構造が一致していない
例えば以下のように、forループの中でアンパックするコードもエラーになりがちです。
|
1 2 3 |
pairs = [(1, 2), (3, 4, 5)] for a, b in pairs: print(a, b) |
2つ目のタプルに3つの値があるため、アンパックできずエラーになります。
3. zip関数を使ったときにリストの構造が期待通りでない
zip関数の使い方によっても同じエラーが出ることがあります。特にネストされた構造を扱う時は注意が必要です。
よくあるエラーのコード例と修正例
【NG例】ValueErrorが出るコード
|
1 2 3 |
data = [("apple", 100), ("banana", 120, "yellow")] for name, price in data: print(name, price) |
このコードでは2つ目の要素に3つの値があり、アンパックに失敗します。
【OK例】正しく書き直したコード
|
1 2 3 |
data = [("apple", 100), ("banana", 120, "yellow")] for item in data: print(item[0], item[1]) |
このように、アンパックせずにインデックスで値を指定することで回避できます。
バグの見つけ方とデバッグのコツ
1. 要素の数をprintで確認
エラーが出る前に、対象のリストやタプルの中身を表示してみましょう:
|
1 |
print(len(data[1])) # 3が返ってくる |
2. try-exceptでエラー箇所を特定
|
1 2 3 4 5 |
try: for name, price in data: print(name, price) except ValueError as e: print("エラー発生:", e) |
こうすると、どこでエラーが発生しているかを可視化できます。
3. enumerateでインデックスを追いながら確認
|
1 2 |
for i, item in enumerate(data): print(f"{i}番目のデータ: {item}") |
ループのどの段階でエラーが出るのかを把握しやすくなります。
まとめ
- ValueError: too many values to unpack は、変数の数と要素の数が合っていない時に発生
- for文やzipの使い方でよく起きる
- デバッグではprintやtry-except、enumerateが有効
- 根本的には、リストの構造をしっかり理解してコードを書くことが大切
Python初心者でも、エラーの内容を正しく理解することでスムーズに開発が進むようになります。少しずつ「エラーと仲良くなる」意識を持っていきましょう。


