# `email.errors`: Clases de excepción y defecto

Código fuente: Lib/email/errors.py

Las siguientes clases de excepción se definen en el módulo `email.errors`:

exception `email.errors.``MessageError`

  Esta es la clase base para todas las excepciones que el paquete `email` puede lanzar. Se deriva de la clase estándar `Exception` y no define métodos adicionales.

exception `email.errors.``MessageParseError`

  Esta es la clase base para las excepciones generadas por la clase `Parser`. Se deriva de `MessageError`. Esta clase también es utilizada internamente por el analizador sintáctico utilizado por `headerregistry`.

exception `email.errors.``HeaderParseError`

  Lanzada en algunas condiciones de error al analizar los encabezados RFC 5322 de un mensaje, esta clase se deriva de `MessageParseError`. El método `set_boundary()` lanzará este error si el tipo de contenido es desconocido cuando se llama al método. `Header` puede lanzar este error para ciertos errores de decodificación de base64, y cuando se intenta crear un encabezado que parece contener un encabezado incrustado (es decir, hay lo que se supone que es un línea de continuación que no tiene espacios en blanco iniciales y parece un encabezado).

exception `email.errors.``BoundaryError`

  Deprecada y no utilizada actualmente.

exception `email.errors.``MultipartConversionError`

  Se lanza cuando se agrega una carga útil (payload) a un objeto `Message` usando `add_payload()`, pero la carga útil ya es un número escalar y el tipo principal del mensaje Content-Type no es multipart ni perdido (missing). `MultipartConversionError` hereda al mismo tiempo de `MessageError` y el incorporado `TypeError`.

  Dado que `Message.add_payload()` está en desuso, esta excepción rara vez se presenta en la práctica. Sin embargo, la excepción también se puede lanzar si se llama al método `attach()` en una instancia de una clase derivada de `MIMENonMultipart` (por ejemplo `MIMEImage`).

Aquí está la lista de defectos que `FeedParser` puede encontrar mientras analiza mensajes. Tenga en cuenta que los defectos se agregan al mensaje donde se encontró el problema, por ejemplo, si un mensaje anidado dentro de un multipart/alternative tenía un encabezado mal formado, ese objeto de mensaje anidado tendría un defecto, pero el contenido los mensajes no lo harían.

Todas las clases de defectos se derivan de `email.errors.MessageDefect`.

- `NoBoundaryInMultipartDefect` – Un mensaje que se dice que es multiparte, pero que no tiene el parámetro boundary.

- `StartBoundaryNotFoundDefect` – El límite de inicio reclamado en el encabezado Content-Type nunca se encontró.

- `CloseBoundaryNotFoundDefect` – Se encontró un límite de inicio, pero nunca se encontró un límite cercano correspondiente.

  Nuevo en la versión 3.3.

- `FirstHeaderLineIsContinuationDefect` – El mensaje tenía una línea de continuación como primera línea de encabezado.

- `MisplacedEnvelopeHeaderDefect` – Se encontró un encabezado «Unix From» en medio de un bloque de encabezado.

- `MissingHeaderBodySeparatorDefect` - Se encontró una línea al analizar sintácticamente los encabezados que no tenían espacios en blanco iniciales pero que no contenían “:”. El análisis continúa asumiendo que la línea representa la primera línea del cuerpo.

  Nuevo en la versión 3.3.

- `MalformedHeaderDefect` – Se encontró un encabezado al que le faltaban dos puntos o tenía un formato incorrecto.

  Obsoleto desde la versión 3.3: Este defecto no se ha utilizado por varias versiones de Python.

- `MultipartInvariantViolationDefect`– Un mensaje que se afirma ser multipart, pero no se encontraron subpartes. Tenga en cuenta que cuando un mensaje tiene este defecto, su método `is_multipart()` puede retornar `False` aunque su tipo de contenido afirma ser multipart.

- `InvalidBase64PaddingDefect` – Al decodificar un bloque de bytes codificados en base64, el relleno no era correcto. Se agrega suficiente relleno (padding) para realizar la decodificación, pero los bytes decodificados resultantes pueden no ser válidos.

- `InvalidBase64CharactersDefect` – Al decodificar un bloque de bytes codificados en base64, se encontraron caracteres fuera del alfabeto base64. Los caracteres se ignoran, pero los bytes decodificados resultantes pueden no ser válidos.

- `InvalidBase64LengthDefect` – Al decodificar un bloque de bytes codificados en base64, el número de caracteres base64 sin relleno no era válido (1 más que un múltiplo de 4). El bloque codificado se mantuvo tal cual.

- `InvalidDateDefect` – Al decodificar una fecha no válida o un campo no parseable. El valor original se mantiene tal cual.