email.errors: классы исключений и дефектов


Определены следующие классы исключений в модуле email.errors:

exception email.errors.MessageError

Базовый класс для всех исключений, которые может вызвать пакет email. Он является производным от стандартного класса Exception и не определяет никаких дополнительных методов.

exception email.errors.MessageParseError

Базовый класс для исключений, вызываемых классом Parser. Он получен из MessageError. Данный класс также используется внутри парсера, используемого headerregistry.

exception email.errors.HeaderParseError

Возникает при некоторых условиях ошибки при парсинге заголовков сообщения RFC 5322, данный класс является производным от MessageParseError. Метод set_boundary() вызовет эту ошибку, если тип содержимого неизвестен при вызове метода. Header может вызвать эту ошибку для определенных ошибок декодирования base64, а также при попытке создать заголовок, который, как представляется, содержит встроенный заголовок (т. е., есть то, что должно быть строкой продолжения, не содержит начальных пробелов и выглядит как заголовок).

exception email.errors.BoundaryError

Устарело и больше не используется.

exception email.errors.MultipartConversionError

Вызывается, когда полезная нагрузка добавляется к объекту Message с использованием add_payload(), но полезная нагрузка уже является скалярной, а основной тип сообщения Content-Type не является multipart или отсутствует. MultipartConversionError многократно наследуется от MessageError и встроенного TypeError.

Поскольку Message.add_payload() устарел, на практике это исключение вызывается редко. Однако исключение также может возникнуть, если метод attach() вызывается для экземпляра класса, производного от MIMENonMultipart (например, MIMEImage).

Вот список дефектов, которые FeedParser может найти при разборе сообщений. Обратите внимание, что дефекты добавляются к сообщению, в котором была обнаружена проблема, поэтому, если у вложенного в multipart/alternative сообщения был искаженный заголовок, данный вложенный объект сообщения будет иметь дефект, а содержащие его сообщения — нет.

Все классы дефектов являются подклассами email.errors.MessageDefect.

  • NoBoundaryInMultipartDefect — сообщение заявлено как состоящее из нескольких частей, но не содержит параметра boundary.

  • StartBoundaryNotFoundDefect — начальная граница, указанная в заголовке Content-Type, так и не была найдена.

  • CloseBoundaryNotFoundDefect — начальная граница найдена, но соответствующая близкая граница не найдена.

    Добавлено в версии 3.3.

  • FirstHeaderLineIsContinuationDefect — в первой строке заголовка сообщения была строка продолжения.

  • MisplacedEnvelopeHeaderDefect — был обнаружен заголовок «Unix From» в середине блока заголовка.

  • MissingHeaderBodySeparatorDefect — при парсинге заголовков была обнаружена строка, в которой не было начального пробела, но не было символа «:». Разбор продолжается, предполагая, что строка представляет собой первую строку тела.

    Добавлено в версии 3.3.

  • MalformedHeaderDefect — в заголовке отсутствовало двоеточие или он был неправильно сформирован.

    Не рекомендуется, начиная с версии 3.3: Данный дефект не использовался в нескольких версиях Python.

  • MultipartInvariantViolationDefect — сообщение заявлено как multipart, но не найдено ни одной части. Обратите внимание, что если у сообщения есть данный дефект, его метод is_multipart() может возвращать False, даже если его тип содержимого заявлен как multipart.

  • InvalidBase64PaddingDefect — при декодировании блока байтов в кодировке base64 заполнение было неверным. Добавляется достаточно заполнения для выполнения декодирования, но результирующие декодированные байты могут быть недействительными.

  • InvalidBase64CharactersDefect — при декодировании блока байтов в кодировке base64 были обнаружены символы вне алфавита base64. Символы игнорируются, но результирующие декодированные байты могут быть недействительными.

  • InvalidBase64LengthDefect — при декодировании блока байтов в кодировке base64 количество символов base64 без заполнения было недопустимым (на 1 больше, чем кратно 4). Закодированный блок был сохранен как есть.