Refactor exceptions, reuse message

Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/reclass/errors.py b/reclass/errors.py
index dfb07b3..959f466 100644
--- a/reclass/errors.py
+++ b/reclass/errors.py
@@ -11,43 +11,41 @@
 
 class ReclassException(Exception):
 
-    def __init__(self, rc=posix.EX_SOFTWARE, *args):
-        super(ReclassException, self).__init__(*args)
+    def __init__(self, msg, rc=posix.EX_SOFTWARE, *args):
+        super(ReclassException, self).__init__(msg, *args)
         self._rc = rc
 
     def __str__(self):
-        return "reclass encountered an exception, sorry!"
+        return self.message
 
-    message = property(lambda self: self.__str__())
     rc = property(lambda self: self._rc)
 
 
 class NotFoundError(ReclassException):
 
-    def __init__(self, rc=posix.EX_IOERR):
-        super(NotFoundError, self).__init__(rc)
+    def __init__(self, msg, rc=posix.EX_IOERR):
+        super(NotFoundError, self).__init__(msg, rc)
 
 
 class NodeNotFound(NotFoundError):
 
     def __init__(self, storage, classname, uri):
-        super(NodeNotFound, self).__init__()
         self._storage = storage
         self._name = classname
         self._uri = uri
-
-    def __str__(self):
-        return "Node '{0}' not found under {1}://{2}".format(self._name,
-                                                             self._storage,
-                                                             self._uri)
+        msg = "Node '{0}' not found under {1}://{2}".format(self._name,
+                                                            self._storage,
+                                                            self._uri)
+        super(NodeNotFound, self).__init__(msg)
 
 
-class ClassNotFound(NodeNotFound):
+class ClassNotFound(NotFoundError):
 
     def __init__(self, storage, classname, uri, nodename):
-        super(ClassNotFound, self).__init__(storage, classname, uri)
+        self._storage = storage
+        self._name = classname
+        self._uri = uri
         self._nodename = nodename
-
-    def __str__(self):
-        return "Class '{0}' (in ancestry of node {1}) not found under {2}://{3}" \
+        msg = "Class '{0}' (in ancestry of node {1}) not found under {2}://{3}" \
                 .format(self._name, self._nodename, self._storage, self._uri)
+        super(ClassNotFound, self).__init__(msg)