19.1.11. email.errors: 例外及び欠陥クラス

ソースコード: Lib/email/errors.py


email.errors モジュールでは、以下の例外クラスが定義されています:

exception email.errors.MessageError

これは email パッケージが送出しうるすべての例外の基底クラスです。これは標準の Exception クラスから派生しており、追加のメソッドは定義されていません。

exception email.errors.MessageParseError

これは Parser クラスが送出しうる例外の基底クラスです。 MessageError から派生しています。

exception email.errors.HeaderParseError

メッセージの RFC 2822 ヘッダを解析しているときのエラー条件で送出されます。これは MessageParseError から派生しています。Parser.parse メソッドや Parser.parsestr メソッドが送出しえます。

この例外が送出されるのはメッセージの最初の RFC 2822 ヘッダの後にエンベロープヘッダが見つかった場合、最初の RFC 2822 ヘッダの前に継続行が見つかった場合、ヘッダ内にヘッダでも継続行でもない行が見つかった場合などです。

exception email.errors.BoundaryError

メッセージの RFC 2822 ヘッダを解析しているときのエラー条件で送出されます。これは MessageParseError から派生しています。Parser.parse メソッドや Parser.parsestr メソッドが送出しえます。

この例外が送出されるのは、厳格なパース時に multipart/* メッセージ内に 開始あるいは終了境界が見付けられなかった場合も含みます。

exception email.errors.MultipartConversionError

この例外は、 Message オブジェクトに add_payload() メソッドでペイロードを追加したが、そのペイロードがすでにスカラー値で、メッセージの Content-Type メインタイプが multipart でないか見付からない場合に送出されます。 MultipartConversionErrorMessageError と組み込みの TypeError を多重継承しています。

Message.add_payload() は非推奨なので、実際のところこの例外が送出されることはほとんどありません。 しかしながら、 attach() メソッドを MIMENonMultipart から派生したインスタンス (たとえば MIMEImage) に対して呼んだ場合にも送出されることがあります。

以下は FeedParser がメッセージの解析中に検出する欠陥 (defect) の一覧です。 問題があった場合、欠陥はメッセージに追加されることに注意してください。 例えば multipart/alternative 内で入れ子になったメッセージに不正な形式のヘッダがあった場合、その入れ子になったメッセージオブジェクトには欠陥がありますが、親メッセージはそうではありません。

すべての欠陥クラスは email.errors.MessageDefect のサブクラスですが、例外では ありません

  • NoBoundaryInMultipartDefect – メッセージが multipart だと宣言されているのに、 boundary パラメータがありません。

  • StartBoundaryNotFoundDefectContent-Type ヘッダで宣言された開始境界がありません。

  • CloseBoundaryNotFoundDefect – 開始境界はあるが対応する終了境界がありません。

    バージョン 3.3 で追加.

  • FirstHeaderLineIsContinuationDefect – メッセージの最初のヘッダ行が継続行です。

  • MisplacedEnvelopeHeaderDefect – ヘッダブロックの途中に “Unix From” ヘッダがあります。

  • MissingHeaderBodySeparatorDefect - 先頭に空白はないが ‘:’ がないヘッダの解析中に行が見付かりました。その行を本体の最初の行とみなして解析を続けます。

    バージョン 3.3 で追加.

  • MalformedHeaderDefect – ヘッダにコロンがありません、あるいはそれ以外の不正な形式です。

    バージョン 3.3 で撤廃: この欠陥が使われていないPythonバージョンがいくつかあります。

  • MultipartInvariantViolationDefect – メッセージが multipart だと宣言されているのに、サブパートが存在しません。 メッセージがこの欠陥を持つ場合、内容の型が multipart と宣言されていても is_multipart() メソッドは偽を返すことがあるので注意してください。

  • InvalidBase64PaddingDefect – 一連の base64 でエンコードされた bytes をデコードしているときにパディングが誤っていました。 デコードするのに十分なパディングがなされますが、デコードされた bytes は不正かもしれません。

  • InvalidBase64CharactersDefect – 一連の base64 でエンコードされた bytes をデコードしているときに base64 アルファベット外の文字がありました。 その文字は無視されますが、デコードされた bytes は不正かもしれません。