Improve error handling in yaml_fs

Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/reclass/storage/yaml_fs/__init__.py b/reclass/storage/yaml_fs/__init__.py
index fcb6710..933def3 100644
--- a/reclass/storage/yaml_fs/__init__.py
+++ b/reclass/storage/yaml_fs/__init__.py
@@ -20,6 +20,12 @@
     def __init__(self, nodes_uri, classes_uri):
         super(ExternalNodeStorage, self).__init__(nodes_uri, classes_uri)
 
+    def _handle_read_error(self, exc, name, base_uri, nodename):
+        if base_uri == self.classes_uri:
+            raise reclass.errors.ClassNotFound('yaml_fs', name, base_uri, nodename)
+        else:
+            raise reclass.errors.NodeNotFound('yaml_fs', name, base_uri)
+
     def _read_entity(self, name, base_uri, seen, nodename=None):
         path = os.path.join(base_uri, name + FILE_EXTENSION)
         try:
@@ -41,11 +47,11 @@
             merge_base.merge(entity)
             return merge_base, path
 
-        except IOError:
-            if base_uri == self.classes_uri:
-                raise reclass.errors.ClassNotFound('yaml_fs', name, base_uri, nodename)
-            else:
-                raise reclass.errors.NodeNotFound('yaml_fs', name, base_uri)
+        except reclass.errors.NotFoundError, e:
+            self._handle_read_error(e, name, base_uri, nodename)
+
+        except IOError, e:
+            self._handle_read_error(e, name, base_uri, nodename)
 
     def _list_inventory(self):
         d = Directory(self.nodes_uri)