- Python
too many values to unpackの直し方|Python
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期連続の黒字決算。