[Email-SIG] fixing the current email module
Barry Warsaw
barry at python.org
Thu Oct 8 04:51:03 CEST 2009
On Oct 7, 2009, at 1:07 PM, Oleg Broytman wrote:
> On Wed, Oct 07, 2009 at 11:23:24AM -0500, Matthew Dixon Cowles wrote:
>> In my opinion, the email module should never raise an exception as a
>> result of working with a malformed message. Though it should
>> certainly make the information that a message was malformed available
>> for the calling program to check.
>
> I disagree. email package is not a user agent, and exceptions are
> *the*
> way to indicate there are problems.
By keeping the various components clear in our mind, we can see that
both statements are correct in a sense. The parser and generator
should never raise exceptions. The model can and probably should.
> Yes, if email parse a message in some way - ok. You can help by
> creating
> more intelligent parser(s). But if a parser stumbles upon an
> unparseable
> block - it must raises an exception.
No. It really can't. Let's say your MTA dropped a bunch of bytes in
a file and in some low-level background process you read those bytes
and turn them into Message trees. Now your parser throws an
exception: what can you possibly do about it except throw away this
unparseable jumble of bytes and log the exception?
Much much better is soldier on and produce a Message object that has
the right format, but additional information, such as a set of defects
it encountered. This is what the current email package does and it
has made Mailman's life infinitely better (when it all DTRT). If you
have a Message with defects, you can reason about it, show partial
information, attempt a repair, etc. With an exception, you're hosed.
-Barry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 832 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/email-sig/attachments/20091007/d3d3cecb/attachment-0001.pgp>
More information about the Email-SIG
mailing list