[Python-Dev] PEP 352: Required Superclass for Exceptions

Nick Coghlan ncoghlan at gmail.com
Fri Oct 28 13:12:42 CEST 2005


Brett Cannon wrote:
> Anyway, as soon as the cron job posts the PEP to the web site (already
> checked into the new svn repository) have a read and start expounding
> about how wonderful it is and that there is no qualms with it
> whatsoever.  =)

You mean aside from the implementation of __getitem__ being broken in 
BaseException*? ;)

Aside from that, I actually do have one real problem and one observation.

The problem: The value of ex.args

   The PEP as written significantly changes the semantics of ex.args - instead 
of being an empty tuple when no arguments are provided, it is instead a 
singleton tuple containing the empty string.

   A backwards compatible definition of BaseException.__init__ would be:

     def __init__(self, *args):
         self.args = args
         self.message = '' if not args else args[0]

The observation: The value of ex.message

   Under PEP 352 the concept of allowing "return x" to be used in a generator 
to mean "raise StopIteration(x)" would actually align quite well. A bare 
"return", however, would need to be changed to translate to "raise 
StopIteration(None)" rather than its current "raise StopIteration" in order to 
get the correct value (None) into ex.message.

Cheers,
Nick.

* (self.args[0] is self.message) due to the way __init__ is written, but 
__getitem__ assumes self.message isn't in self.args)

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://boredomandlaziness.blogspot.com


More information about the Python-Dev mailing list