diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index efd1b7299af2d42c8f94bb869e614465582c6907..fdaf01a568235023637755758464b16c7c40c4f7 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -62,47 +62,45 @@ class Hxtorch(WafPackage):
 
         include = []
         include_exclude_dirs = set(['/usr/include'])
-        for dep in self.spec.traverse(deptype='build'):
+        for dep in self.spec.traverse(deptype='build', root=False):
             query = self.spec[dep.name]
+            if dep.name in ['pthreadpool', 'fxdiv']:
+                print('skipping {} in SPACK_INCLUDE_DIRS/CPATH/C{{,_PLUS}}_INCLUDE_PATH\n'.format(dep.name))
+                for d in query.headers.directories:
+                    if os.path.exists(d):
+                        env.remove_path('SPACK_INCLUDE_DIRS', d)
+                continue
             try:
-                if dep.name in ['pthreadpool', 'fxdiv']:
-                    print('skipping {} in SPACK_INCLUDE_DIRS/CPATH/C{{,_PLUS}}_INCLUDE_PATH\n'.format(dep.name))
-                    for d in query.headers.directories:
-                        if os.path.exists(d):
-                            env.remove_path('SPACK_INCLUDE_DIRS', d)
-                    continue
-                assert(isinstance(query.headers.directories, list))
                 include_dirs = set(query.headers.directories)
                 include_dirs -= include_exclude_dirs
                 print('headers (', dep.name, '):', include_dirs, "\n")
                 include.extend(list(include_dirs))
-            except:
+            except error.NoHeadersError:
+                # we don't care if no header directories are found
                 pass
 
         library = []
         library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64'])
-        for dep in self.spec.traverse(deptype=('link', 'run')):
+        for dep in self.spec.traverse(deptype=('link', 'run'), root=False):
             query = self.spec[dep.name]
             try:
-                assert(isinstance(query.libs.directories, list))
                 library_dirs = set(query.libs.directories)
                 library_dirs -= library_exclude_dirs
                 print('libs (', dep.name, '):', library_dirs, "\n")
                 library.extend(list(library_dirs))
-            except:
+            except error.NoLibrariesError:
+                # we don't care if no library directories are found
                 pass
 
         path = []
-        for dep in self.spec.traverse(deptype=('build', 'link', 'run')):
+        for dep in self.spec.traverse(deptype=('build', 'link', 'run'), root=False):
             if dep.name in ['pthreadpool', 'fxdiv']:
                 print('skipping {} for bin'.format(dep.name))
                 continue
             query = self.spec[dep.name]
-            try:
+            if os.path.exists(self.prefix.bin):
                 path.append(query.prefix.bin)
                 print('bin (', dep.name, '):', query.prefix.bin, "\n")
-            except:
-                pass
 
         # llvm might be built with ~shared_libs but still builds shared libs
         if not any('llvm' in lib for lib in library):
diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py
index 49bb2e5909c6a6b21e3496c9423048e6b036fbdd..a85cb4bd5c3a998787ef15268833500d662ffabe 100644
--- a/packages/pynn-brainscales/package.py
+++ b/packages/pynn-brainscales/package.py
@@ -61,38 +61,36 @@ class PynnBrainscales(WafPackage):
 
         include = []
         include_exclude_dirs = set(['/usr/include'])
-        for dep in self.spec.traverse(deptype='build'):
+        for dep in self.spec.traverse(deptype='build', root=False):
             query = self.spec[dep.name]
             try:
-                assert(isinstance(query.headers.directories, list))
                 include_dirs = set(query.headers.directories)
                 include_dirs -= include_exclude_dirs
                 print('headers (', dep.name, '):', include_dirs, "\n")
                 include.extend(list(include_dirs))
-            except:
+            except error.NoHeadersError:
+                # we don't care if no header directories are found
                 pass
 
         library = []
         library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64'])
-        for dep in self.spec.traverse(deptype=('link', 'run')):
+        for dep in self.spec.traverse(deptype=('link', 'run'), root=False):
             query = self.spec[dep.name]
             try:
-                assert(isinstance(query.libs.directories, list))
                 library_dirs = set(query.libs.directories)
                 library_dirs -= library_exclude_dirs
                 print('libs (', dep.name, '):', library_dirs, "\n")
                 library.extend(list(library_dirs))
-            except:
+            except error.NoLibrariesError:
+                # we don't care if no library directories are found
                 pass
 
         path = []
-        for dep in self.spec.traverse(deptype=('build', 'link', 'run')):
+        for dep in self.spec.traverse(deptype=('build', 'link', 'run'), root=False):
             query = self.spec[dep.name]
-            try:
+            if os.path.exists(self.prefix.bin):
                 path.append(query.prefix.bin)
                 print('bin (', dep.name, '):', query.prefix.bin, "\n")
-            except:
-                pass
 
         # llvm might be built with ~shared_libs but still builds shared libs
         if not any('llvm' in lib for lib in library):