Исключения¶
Все классы доступны напрямую из bytespec и в bytespec.errors.
Практические примеры: Обработка ошибок.
Exception
└── BytespecError
├── SchemaError
├── EncodeError
└── DecodeError
- exception bytespec.BytespecError[исходный код]¶
Общий базовый класс ошибок схемы, кодирования и декодирования.
Общий базовый класс ошибок библиотеки, подкласс
Exception.
- exception bytespec.SchemaError[исходный код]¶
Базовые классы:
BytespecErrorНеподдерживаемые или противоречивые типы/настройки модели или codec.
Обычно возникает при объявлении модели или создании codec. Некоторые ошибки настройки, например нетекстовая кодировка строки, проявляются при записи или чтении.
Неподдерживаемая или противоречивая схема/конфигурация codec.
Возникает при неподдерживаемом типе/union, неразрешимой аннотации, неправильных индексах, flags, defaults, числовых specs или codec override. Проверяется уникальность flags и их размещение в выбранном размере, наличие flag у optional и отсутствие его у обязательного поля. Также отклоняются конфликтующие унаследованные custom headers без явного выбора в дочернем классе.
Неподдерживаемые представления элементов header и префиксов, неверный тип constructor, отрицательная длина
FixedBytesCodec, неправильныйstruct-формат и неизвестное имя кодировки также дают эту ошибку. Существующий Python codec, непригодный для текста (например,base64_codec), отклоняется при записи или чтении строки, а не обязательно при объявлении модели.
- exception bytespec.EncodeError[исходный код]¶
Базовые классы:
BytespecErrorЗначение нельзя записать в выбранном бинарном представлении.
Например, число вне диапазона, переполнение префикса длины, непредставимый в кодировке текст или отсутствие обязательного значения.
Значение не может быть записано в заданный формат.
Включает выход целого/varint за диапазон, переполнение float или длины префикса, ошибку кодирования текста и несовпадение длины
FixedBytesCodec. Сюда же относится constructor вне диапазона своего представления. Модель также отклоняет удалённый атрибут иNoneу обязательного поля.
- exception bytespec.DecodeError[исходный код]¶
Базовые классы:
BytespecErrorБуфер неполон или не соответствует ожидаемому бинарному формату.
Например, неверный constructor, недостающие байты, некорректное значение или данные после сообщения при вызове
ProtoModel.decode().Буфер не может быть прочитан по заданной схеме.
Включает неполный заголовок, несовпадение constructor, объявленную длину за пределами буфера, обрезанное поле, выход за границу содержимого модели, неправильный bool, текст, ISO datetime, enum или varint.
decode()отклоняет байты после сообщения. Неизвестный остаток внутри объявленной длины имеет другие правила — Границы и неизвестные данные.
Отсутствие Flags при собственных или унаследованных optional-полях
вызывает SchemaError при объявлении класса. Новый header подкласса
проверяется и без объявления новых полей. Уникальность видов элементов
header отдельно не проверяется — Что проверяется в 0.1.0.
Диагностика и обычные исключения Python¶
При обработке EncodeError/DecodeError поля модель добавляет имя класса
и поля в текст исключения. Сам объект ошибки не заменяется. Обёрнутые
struct.error, Unicode-ошибки и ошибки преобразования enum/datetime
сохраняются в __cause__.
Смещения у декодеров обычно относятся к переданному буферу. Для элемента
списка это отдельный буфер содержимого списка, а не исходного сообщения.
Отдельных атрибутов field и offset у исключений нет.
Неправильные аргументы вызова модели, пропущенное обязательное поле
и неправильный тип результата factory дают TypeError. Отрицательное
смещение даёт ValueError. Явные аргументы модели не проходят полную
валидацию: значения совершенно другого типа и ошибки custom codec
могут дать стандартные исключения Python. Исключения validator передаются
без обёртки при создании и чтении модели — Проверка значений модели.