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

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 のサブクラスですが、これは例外とは 違います ので注意してください!

バージョン 2.4 で追加: 全ての障害クラスが追加されました。

  • NoBoundaryInMultipartDefect – メッセージが multipart だと宣言されているのに、 boundary パラメータがない。
  • StartBoundaryNotFoundDefectContent-Type ヘッダで宣言された開始境界がない。
  • FirstHeaderLineIsContinuationDefect – メッセージの最初のヘッダが継続行から始まっている。
  • MisplacedEnvelopeHeaderDefect – ヘッダブロックの途中に "Unix From" ヘッダがある。
  • MalformedHeaderDefect – コロンのないヘッダがある、あるいはそれ以外の異常なヘッダである。
  • MultipartInvariantViolationDefect – メッセージが multipart だと宣言されているのに、サブパートが存在しない。注意: メッセージがこの障害を持っているとき、 is_multipart() メソッドはたとえその content-type が multipart であっても false を返すことがあります。