[Python-ideas] Wild idea: Exception.format

ilya ilya.nikokoshev at gmail.com
Fri Sep 18 21:54:24 CEST 2009


How about simplifying creation of a subclass for this pattern::

class NotRegisteredError(LookupError):
    template = 'Extension {1} not registered'

...
raise NotRegisteredError(ext)


This is instead of::

class NotRegisteredError(LookupError):
    def __init__(self, *args):
        super().__init__('Extension {1} not registered'.format(self,
*args), *args)


Advantages to having a separate subclass:
(1) it can be reused
(2) it can be caught separately from LookupError
(3) you can list possible exceptions in the beginning of module
(4) you can search for functions that raise a specific exception

What do you think?

Ilya.

On Fri, Sep 18, 2009 at 6:07 PM, Georg Brandl <g.brandl at gmx.net> wrote:
> To make Exceptions where some object(s) are involved more useful, it is
> often necessary to put the objects on the exception *in addition to*
> formatting them into a string representation for the message.
>
> This little classmethod would make that easier::
>
>  class BaseException:
>    @classmethod
>    def format(cls, fmt, *args):
>      return cls(fmt.format(*args), *args)
>
> Example usage::
>
>  ext = 'foo'
>  raise LookupError.format('Extension {0} not registered', ext)
>
> 'foo' could then be accessed as ``exc.args[1]``.
>
>
> A similar, but also very useful implementation would be ::
>
>  def format(cls, fmt, **kwds):
>    exc = cls(fmt.format(**kwds))
>    exc.__dict__.update(kwds)
>    return exc
>
> with example usage being::
>
>  raise LookupError.format('Extension {ext} not registered', ext='foo')
>
> and 'foo' being accessible as ``exc.ext``.
>
> I realize this is probably too obscure for Python core, but I wanted to
> show it to you anyway, maybe it'll be found useful.
>
> Georg
>
> --
> Thus spake the Lord: Thou shalt indent with four spaces. No more, no less.
> Four shall be the number of spaces thou shalt indent, and the number of thy
> indenting shall be four. Eight shalt thou not indent, nor either indent thou
> two, excepting that thou then proceed to four. Tabs are right out.
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>



More information about the Python-ideas mailing list