← Все вопросы

ValueError: too many values to unpack (expected 2) — что значит при распаковке?

Задан 20 месяцев назад498 просмотров3 ответа
10
for line in file:
    key, value = line.split()

на некоторых строках падает ValueError: too many values to unpack (expected 2). Как это правильно обработать?

3 ответа

19
✓ Принятый ответ — помог автору

Распаковка a, b = ... требует, чтобы справа было РОВНО два элемента. Сообщение «too many values to unpack (expected 2)» значит, что справа их оказалось больше двух — например, строка "a b c" после split() даёт три куска, а слева только две переменные.

Варианты:

  1. Если лишние куски нужно склеить в один — ограничьте число разбиений:
key, value = line.split(maxsplit=1)  # делим только по первому пробелу
  1. Если хвост нужно собрать в список — звёздочка:
key, *rest = line.split()
  1. Бывает и обратное — not enough values to unpack, это когда элементов МЕНЬШЕ, чем переменных (например, пустая строка). Стоит заранее отфильтровать пустые строки.
5

maxsplit=1 в split — и проблема уходит, если делите «ключ + остаток».

3

Звёздочкой: first, *others = ...

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект