Source code for androlyze.error.WrapperException


# encoding: utf-8

__author__ = "Nils Tobias Schmidt"
__email__ = "schmidt89 at informatik.uni-marburg.de"

from androlyze.error.AndroLyzeLabError import AndroLyzeLabError


[docs]class WrapperException(AndroLyzeLabError): ''' Exception for simulating the caused by behavior known from java. So that one knows why the exception has been reraised. Overwrite `_msg` in a subclass. Examples -------- >>> try: ... raise WrapperException(caused_by = ValueError("some error msg")) ... except Exception as e: ... print e WrapperException: Caused by: ValueError: some error msg >>> # specify custom exception message ... try: ... raise WrapperException(caused_by = ValueError("some error msg"), msg = "exception message") ... except Exception as e: ... print e WrapperException: exception message Caused by: ValueError: some error msg >>> class WrapperExceptionSubclass(WrapperException): ... def _msg(self): ... return "Overwritten error message" ... try: ... raise WrapperException(caused_by = WrapperExceptionSubclass(), msg = "exception message") ... except Exception as e: ... print e WrapperException: exception message Caused by: WrapperExceptionSubclass: Overwritten error message >>> # shows all caused_by ... try: ... raise WrapperException(caused_by = WrapperExceptionSubclass(caused_by = WrapperExceptionSubclass(), msg = "exception message")) ... except Exception as e: ... print e WrapperException: Caused by: WrapperExceptionSubclass: exception message Caused by: WrapperExceptionSubclass: Overwritten error message ''' def __init__(self, msg = None, caused_by = None): ''' Parameters ---------- caused_by: Exception, optional (default is None) Exception that caused this one to raise. If non given, no caused-by message will be appended. msg : str, optional (default is None) If given, use the `msg` instead of the result of `__str__`. ''' super(WrapperException, self).__init__() self.caused_by = caused_by self.msg = msg def __str__(self): msg = None if self.msg is not None: msg = self.msg else: msg = self._msg() caused_by_msg = None if isinstance(self.caused_by, WrapperException): caused_by_msg = str(self.caused_by) else: caused_by_msg = '%s: %s' % (self.caused_by.__class__.__name__, str(self.caused_by)) base_msg = '%s: %s' % (self.__class__.__name__, msg) if self.caused_by is None: return base_msg return '%s\n\tCaused by: %s' % (base_msg, caused_by_msg) def _msg(self): ''' Overwrite this method in a subclass. It's supposed to hold the exception message ''' return ""