Re-raising exceptions with modified message

Gerard Flanagan grflanagan at yahoo.co.uk
Fri Jul 6 10:13:00 EDT 2007


On Jul 6, 12:18 am, Christoph Zwerschke <c... at online.de> wrote:
> Sorry for the soliloquy, but what I am really using is the following so
> that the re-raised excpetion has the same type:
>
> def PoliteException(e):
>      class PoliteException(e.__class__):
>          def __init__(self, e):
>              self._e = e
>          def __getattr__(self, name):
>              return getattr(self._e, name)
>          def __str__(self):
>              if isinstance(self._e, PoliteException):
>                  return str(self._e)
>              else:
>                  return '\n%s: %s, I am sorry!' % (
>                      self._e.__class__.__name__, str(self._e))
>      return PoliteException(e)
>
> try:
>      unicode('\xe4')
> except Exception, e:
>      raise PoliteException(e)

Would a decorator work here?


class PoliteException(Exception):
    def __init__(self, e):
        self._e = e
    def __getattr__(self, name):
        return getattr(self._e, name)
    def __str__(self):
        return '\n%s: %s, I am sorry!' % (
                    self._e.__class__.__name__, str(self._e))

def politefail(fn):
    def wrapper(*args, **kwargs):
        try:
            return fn(*args, **kwargs)
        except Exception, e:
            raise PoliteException(e)
    return wrapper

@politefail
def funktion():
     unicode('\xe4')

funktion()

@politefail
def raise_exception(err, *args):
    raise err(*args)


def funktion():
    if 1 != 2:
        raise_exception(ArithmeticError, '1 is not equal to 2.')

print
funktion()




More information about the Python-list mailing list