Ошибка expected value (list, dict, int or string) in bencoded string появляется в торрент-клиентах и программах, работающих с форматом bencode, когда парсер встречает байт, который не может быть началом ни одного допустимого типа данных. Проще говоря: файл, который программа пытается прочитать как .torrent, повреждён, обрезан или вообще не является bencoded-данными. Чаще всего это случается при добавлении торрент-файла в qBittorrent, Deluge, Transmission или при загрузке magnet-ссылки, метаданные которой пришли не полностью.

Проблема не связана с «железом» и не означает поломку диска — это чисто программная ошибка декодирования. В большинстве ситуаций её можно устранить повторной загрузкой торрент-файла или очисткой кэша клиента. Ниже разберём, как устроен формат bencode, почему возникает именно эта формулировка и какие шаги помогают в каждом конкретном сценарии.

Что такое bencode и почему парсер ругается на значение

Bencode — это простой бинарный формат сериализации данных, используемый в протоколе BitTorrent. В нём существует ровно четыре типа значений: целое число (начинается с символа i и заканчивается e), байтовая строка (длина, двоеточие, сами данные — например 4:spam), список (l...e) и словарь (d...e). Любой корректный bencoded-документ обязан начинаться с одного из этих маркеров.

Когда парсер встречает байт, который не является ни i, ни цифрой, ни l, ни d, он выбрасывает именно это исключение: «expected value (list, dict, int or string)». То есть программа ожидала начало значения, а получила мусор. Типичные причины мусора — HTML-страница ошибки вместо файла, обрезанная загрузка, неверная кодировка или посторонние символы в начале файла.

Важно понимать: текст ошибки одинаковый, а первопричины разные. Поэтому диагностику стоит начинать с проверки самого файла, а затем уже копать в сторону клиента или сети.

💡

Ошибка означает, что парсер не смог распознать начало значения в bencoded-данных — файл повреждён, обрезан или не является торрент-файлом вовсе.