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 以外になってしまっている場合にこの例外が発生します。MultipartConversionErrorはMessageErrorと組み込みのTypeErrorを両方継承しています。Message.add_payload()はもはや推奨されないメソッドのため、この例外はめったに発生しません。しかしこの例外はattach()メソッドがMIMENonMultipartから派生したクラスのインスタンス (例:MIMEImageなど) に対して呼ばれたときにも発生することがあります。
以下は FeedParser がメッセージの解析中に検出する障害 (defect) の一覧です。これらの障害は、問題が見つかったメッセージに追加されるため、たとえば multipart/alternative 内にあるネストしたメッセージが異常なヘッダをもっていた場合には、そのネストしたメッセージが障害を持っているが、その親メッセージには障害はないとみなされることに注意してください。
すべての障害クラスは email.errors.MessageDefect のサブクラスですが、これは例外とは 違います ので注意してください!
バージョン 2.4 で追加: 全ての障害クラスが追加されました。
NoBoundaryInMultipartDefect-- メッセージが multipart だと宣言されているのに、 boundary パラメータがない。StartBoundaryNotFoundDefect-- Content-Type ヘッダで宣言された開始境界がない。FirstHeaderLineIsContinuationDefect-- メッセージの最初のヘッダが継続行から始まっている。MisplacedEnvelopeHeaderDefect-- ヘッダブロックの途中に "Unix From" ヘッダがある。MalformedHeaderDefect-- コロンのないヘッダがある、あるいはそれ以外の異常なヘッダである。MultipartInvariantViolationDefect-- メッセージが multipart だと宣言されているのに、サブパートが存在しない。注意: メッセージがこの障害を持っているとき、is_multipart()メソッドはたとえその content-type が multipart であっても false を返すことがあります。
