]> granicus.if.org Git - python/commitdiff
Allow the 'onerror' argument to walk_packages() to catch any Exception, not
authorPhillip J. Eby <pje@telecommunity.com>
Wed, 26 Jul 2006 19:48:27 +0000 (19:48 +0000)
committerPhillip J. Eby <pje@telecommunity.com>
Wed, 26 Jul 2006 19:48:27 +0000 (19:48 +0000)
just ImportError.  This allows documentation tools to better skip unimportable
packages.

Lib/pkgutil.py

index e138849de6eba9154ee2e51b3cc3f5f452b1c500..02497d7af793cc79ca6a69a74570f7ad2efc0754 100644 (file)
@@ -83,13 +83,18 @@ def walk_packages(path=None, prefix='', onerror=None):
     attribute to find submodules.
 
     'onerror' is a function which gets called with one argument (the
-    name of the package which was being imported) if an ImportError
-    occurs trying to import a package. By default the ImportError is
-    caught and ignored.
+    name of the package which was being imported) if any exception
+    occurs while trying to import a package.  If no onerror function is
+    supplied, ImportErrors are caught and ignored, while all other
+    exceptions are propagated, terminating the search.
 
     Examples:
-    walk_packages() : list all modules python can access
-    walk_packages(ctypes.__path__, ctypes.__name__+'.') : list all submodules of ctypes
+
+    # list all modules python can access
+    walk_packages() 
+
+    # list all submodules of ctypes
+    walk_packages(ctypes.__path__, ctypes.__name__+'.')
     """
 
     def seen(p, m={}):
@@ -106,6 +111,11 @@ def walk_packages(path=None, prefix='', onerror=None):
             except ImportError:
                 if onerror is not None:
                     onerror(name)
+            except Exception:
+                if onerror is not None:
+                    onerror(name)
+                else:
+                    raise
             else:
                 path = getattr(sys.modules[name], '__path__', None) or []