]> granicus.if.org Git - python/commitdiff
Check in the patch proposed by Ben Hayden (benjhayden) for issue
authorKa-Ping Yee <ping@zesty.ca>
Sun, 13 Jan 2008 11:25:13 +0000 (11:25 +0000)
committerKa-Ping Yee <ping@zesty.ca>
Sun, 13 Jan 2008 11:25:13 +0000 (11:25 +0000)
#1550: help('modules') broken by several 3rd party libraries.

Tested with Python build: trunk:54235:59936M -- the reported error
occurs with Django installed (or with any __init__.py present on
the path that raises an exception), and such errors indeed go away
when this change is applied.

Lib/pydoc.py

index f69f73364ac10df52c499b83e06537b8560195b9..2d32316ead94f0e54325e7ba9dcf409e688a219d 100755 (executable)
@@ -1816,7 +1816,9 @@ Please wait a moment while I gather a list of all available modules...
                     modname = modname[:-9] + ' (package)'
                 if find(modname, '.') < 0:
                     modules[modname] = 1
-            ModuleScanner().run(callback)
+            def onerror(modname):
+                callback(None, modname, None)
+            ModuleScanner().run(callback, onerror=onerror)
             self.list(modules.keys())
             self.output.write('''
 Enter any module name to get more help.  Or, type "modules spam" to search
@@ -1852,7 +1854,7 @@ class Scanner:
 class ModuleScanner:
     """An interruptible scanner that searches module synopses."""
 
-    def run(self, callback, key=None, completer=None):
+    def run(self, callback, key=None, completer=None, onerror=None):
         if key: key = lower(key)
         self.quit = False
         seen = {}
@@ -1867,7 +1869,7 @@ class ModuleScanner:
                     if find(lower(modname + ' - ' + desc), key) >= 0:
                         callback(None, modname, desc)
 
-        for importer, modname, ispkg in pkgutil.walk_packages():
+        for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror):
             if self.quit:
                 break
             if key is None: