19.1.5. email.errors
: exceptions et classes pour les anomalies¶
Code source : Lib/email/errors.py
Les classes d’exception suivantes sont définies dans le module email.errors
:
-
exception
email.errors.
MessageError
¶ Exception de base, dont héritent toutes les exceptions du paquet
email
. Cette classe hérite de la classe nativeException
et ne définit aucune méthode additionnelle.
-
exception
email.errors.
MessageParseError
¶ Exception de base pour les exceptions levées par la classe
Parser
. Elle hérite deMessageError
. Cette classe est aussi utilisée en interne par l’analyseur deheaderregistry
.
-
exception
email.errors.
HeaderParseError
¶ Cette exception, dérivée de
MessageParseError
, est levée sous différentes conditions lors de l’analyse des en-têtes RFC 5322 du message. Lorsque la méthodeset_boundary()
est invoquée, elle lève cette erreur si le type du contenu est inconnu. La classeHeader
lève cette exception pour certains types d’erreurs provenant du décodage base64. Elle la lève aussi quand un en-tête est créé et qu’il semble contenir un en-tête imbriqué, c’est-à-dire que la ligne qui suit ressemble à un en-tête et ne commence pas par des caractères d’espacement.
-
exception
email.errors.
BoundaryError
¶ Obsolète, n’est plus utilisé.
-
exception
email.errors.
MultipartConversionError
¶ Cette exception est levée quand le contenu, que la méthode
add_payload()
essaie d’ajouter à l’objetMessage
, est déjà un scalaire et que le type principal du message Content-Type est manquant ou différent de multipart.MultipartConversionError
hérite à la fois deMessageError
et deTypeError
.Comme la méthode
Message.add_payload()
est obsolète, cette exception est rarement utilisée. Néanmoins, elle peut être levée si la méthodeattach()
est invoquée sur une instance de classe dérivée deMIMENonMultipart
(p. ex.MIMEImage
).
Voici la liste des anomalies que peut identifier FeedParser
pendant l’analyse des messages. Notez que les anomalies sont signalées à l’endroit où elles sont détectées : par exemple, dans le cas d’une malformation de l’en-tête d’un message imbriqué dans un message de type multipart/alternative, l’anomalie est signalée sur le message imbriqué seulement.
Toutes les anomalies sont des sous-classes de email.errors.MessageDefect
.
NoBoundaryInMultipartDefect
— Un message qui prétend être composite (multipart en anglais), mais qui ne contient pas de séparateur boundary.StartBoundaryNotFoundDefect
— Le message ne contient pas le séparateur de départ indiqué dans le Content-Type.CloseBoundaryNotFoundDefect
— Le séparateur de départ a été trouvé, mais pas le séparateur de fin correspondant.Nouveau dans la version 3.3.
FirstHeaderLineIsContinuationDefect
— La première ligne de l’en-tête du message est une ligne de continuation.MisplacedEnvelopeHeaderDefect
— Un en-tête Unix From est présent à l’intérieur d’un bloc d’en-tête.MissingHeaderBodySeparatorDefect
— Une ligne d’en-tête ne contient pas de caractères d’espacement au début et aucun « : ». L’analyse continue en supposant qu’il s’agit donc de la première ligne du corps du message.Nouveau dans la version 3.3.
MalformedHeaderDefect
– Un en-tête est mal formé ou il manque un « : ».Obsolète depuis la version 3.3: Cette anomalie est obsolète depuis plusieurs versions de Python.
MultipartInvariantViolationDefect
– A message claimed to be a multipart, but no subparts were found. Note that when a message has this defect, itsis_multipart()
method may return false even though its content type claims to be multipart.InvalidBase64PaddingDefect
— Remplissage incorrect d’un bloc d’octets encodés en base64. Des caractères de remplissage ont été ajoutés pour permettre le décodage, mais le résultat du décodage peut être invalide.InvalidBase64CharactersDefect
— Des caractères n’appartenant pas à l’alphabet base64 ont été rencontrés lors du décodage d’un bloc d’octets encodés en base64. Les caractères ont été ignorés, mais le résultat du décodage peut être invalide.InvalidBase64LengthDefect
— Le nombre de caractères (autres que de remplissage) d’un bloc d’octets encodés en base64 est invalide (1 de plus qu’un multiple de 4). Le bloc encodé n’a pas été modifié.