ValueError: too many values to unpack (expected 2) は、a, b = ... のように複数の変数に分けて受け取るとき、右側の値の個数が、変数の数より多かったときのエラーです。 少ないときは not enough values to unpack (expected 2, got 1) になります。

よくある原因 例 直し方
辞書を .items() なしでループ for k, v in d: for k, v in d.items():
split の結果が想定より多い name, addr = line.split(',')(住所にもカンマ) split(',', 1)、CSV は csv モジュール
関数の戻り値の数が違う a, b = f()(f は3つ返す) 受け取る数を合わせる、*rest
numpy の shape h, w = img.shape(カラー画像は3次元) h, w = img.shape[:2]

確認環境:Python 3.10・3.13・3.14、pandas 3.0、numpy(確認日 2026年10月11日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「too many values to unpackの直し方|Python」

一番多い原因:辞書を .items() なしでループした

d = {'tokyo': 1, 'osaka': 2}
for k, v in d:          # ← .items() が無い
    print(k, v)
ValueError: too many values to unpack (expected 2)

辞書をそのままループすると、キーだけが1つずつ取り出されます。 'tokyo' という文字列を k, v の2つに分けようとし、5文字なので「多すぎる」になりました。

for k, v in d.items():  # キーと値の組を取り出す
    print(k, v)         # tokyo 1

落とし穴:キーが2文字だとエラーにならない

d = {'ab': 1, 'cd': 2}
for k, v in d:
    print('k=', k, 'v=', v)
k= a v= b               ← エラーにならず、キーの文字が分かれて入った
k= c v= d

キーがちょうど2文字だと、文字列 'ab' が 'a' と 'b' に分かれ、エラーにならずに間違った値で進みました。 キーが1文字なら not enough values to unpack (expected 2, got 1) です。都道府県コード('13')や、2文字の区分('OK'・'NG')をキーにしていると、エラーにならずに値がおかしくなります。辞書のループは、キーと値の両方を使うなら必ず .items() と覚えておきます。

キーの文字数 for k, v in d: の結果
1文字 not enough values to unpack (expected 2, got 1)
2文字 エラーにならない(k と v にキーの1文字目と2文字目)
3文字以上 too many values to unpack (expected 2)

split の結果が想定より多い・少ない

line = '佐藤,東京都,港区'
name, addr = line.split(',')
ValueError: too many values to unpack (expected 2)

住所の中にもカンマがあり、3つに分かれました。 データによって個数が変わるので、特定の行だけで出るのが特徴です。

書き方 結果
name, addr = line.split(',', 1) '佐藤'・'東京都,港区'(最初のカンマだけで分ける)
name, *rest = line.split(',') '佐藤'・['東京都', '港区'](残りをリストで受ける)
name, addr = '佐藤'.split(',') not enough values to unpack (expected 2, got 1)(カンマが無い行)

CSV は split ではなく csv モジュールで

import csv, io
line = '"佐藤","東京都,港区"'
len(line.split(','))                      # 3(引用符の中のカンマでも分かれる)
next(csv.reader(io.StringIO(line)))       # ['佐藤', '東京都,港区'](2つ)

引用符で囲まれた値の中のカンマは、split では区切りとして扱われますが、csv モジュールでは正しく1つの値になりました。 CSV を読むときは、csv.reader か pandas の read_csv を使います。

Python 3.14 では、いくつ来たかが表示される

右側 Python 3.10・3.13 Python 3.14
リスト・タプル(split の結果など) too many values to unpack (expected 2) too many values to unpack (expected 2, got 3)
文字列・辞書のループ (expected 2) (expected 2)(個数は出ない)
少ないとき not enough values to unpack (expected 2, got 1) 同じ

3.13 までは「多すぎる」ときに実際の個数が出ません。 何個来ているかを確かめるには、分ける前に表示します。

parts = line.split(',')
print(len(parts), parts)        # 3 ['佐藤', '東京都', '港区']
name, addr = parts

そのほかのよくある形

def f(): return 1, 2, 3
a, b = f()                       # too many values to unpack (expected 2)

rows = [[1, 2], [3, 4, 5]]
for a, b in rows: ...            # 2行目で too many values to unpack

pairs = [('a', 1), ('b', 2)]
for i, k, v in enumerate(pairs): ...        # not enough values to unpack (expected 3, got 2)
for i, (k, v) in enumerate(pairs): ...      # 動く(括弧で組を分ける)

a, b = 5                         # TypeError: cannot unpack non-iterable int object

enumerate は「番号」と「要素」の2つを返すので、要素の中を分けるときは括弧で囲みます。 数値など、分けられない値では、ValueError ではなく TypeError: cannot unpack non-iterable int object になります。関数が None を返したときも、同じ形の TypeError(NoneType)になります。

numpy の shape・pandas

img = np.zeros((480, 640, 3))     # カラー画像(高さ・幅・色)
h, w = img.shape                  # too many values to unpack (expected 2)
h, w = img.shape[:2]              # 480 640
df = pd.DataFrame({'a': [1], 'b': [2], 'c': [3]})
for a, b in df: ...               # not enough values to unpack (expected 2, got 1)
for i, row in df.iterrows(): ...  # 動く(行番号と行)

DataFrame をそのままループすると、列名が1つずつ出てきました(辞書と同じ動き)。行ごとに回すなら iterrows()・itertuples() を使います。

確認の手順(チェックリスト)

順番 確認すること 方法
1 多いか少ないか too many(多い)か not enough ... got N(少ない)
2 右側は何か 分ける前に print(len(x), x)
3 辞書のループ .items() を付けたか(2文字のキーは黙って崩れる)
4 split split(',', 1)、*rest、CSV は csv モジュール
5 enumerate・zip 要素を分けるなら括弧 (k, v)
6 numpy・pandas shape[:2]、iterrows()

よくある質問

Q. try で囲んで、エラーの行だけ飛ばしてもよいですか。 A. 取り込みの処理なら、エラーになった行を記録して後で確かめる方法があります。ただ、上の「2文字のキー」のように、エラーにならずに値が崩れるケースもあるので、まずは個数が合う書き方(.items()・csv)に直すのが先です。

まとめ

  • 右側の個数が、受け取る変数の数と合わないエラー
  • 一番多いのは辞書のループで .items() を忘れた形
  • キーが2文字だとエラーにならず、値が崩れる
  • split は split(',', 1)・*rest、CSV は csv モジュール
  • 3.13 までは個数が出ない。print(len(x), x) で確かめる(3.14 はリストなら got 3 と出る)
  • numpy は shape[:2]、DataFrame の行は iterrows()

参考・出典

確認日はいずれも 2026年10月11日です。

  • Python ドキュメント「Data Structures」(Looping Techniques):https://docs.python.org/3/tutorial/datastructures.html

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「too many values to unpackの直し方|Python」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?