Check in the patch proposed by Ben Hayden (benjhayden) for issue

#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.
This commit is contained in:
Ka-Ping Yee 2008-01-13 11:25:13 +00:00
parent 5f0b7ae481
commit 9e0f116fac
1 changed files with 5 additions and 3 deletions

View File

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