From: Brett Cannon Date: Mon, 30 Mar 2009 19:57:15 +0000 (+0000) Subject: Fix importlib.machinery.PathFinder.find_module() to essentially skip over None X-Git-Tag: v3.1a2~161 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8593a7568817bf36039460e34826822bec9c3904;p=python Fix importlib.machinery.PathFinder.find_module() to essentially skip over None entries in sys.path_importer_cache. While this differs from semantics in how __import__ works, it prevents any implicit semantics from taking hold with users. --- diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index d5b909e32f..949a612338 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -661,9 +661,10 @@ class PathFinder: finder = cls._path_importer_cache(entry) except ImportError: continue - loader = finder.find_module(fullname) - if loader: - return loader + if finder: + loader = finder.find_module(fullname) + if loader: + return loader else: return None diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py index 3d9b1a1ccd..ede9b5f4c9 100644 --- a/Lib/importlib/test/import_/test_path.py +++ b/Lib/importlib/test/import_/test_path.py @@ -55,6 +55,25 @@ class FinderTests(unittest.TestCase): self.assert_(path in sys.path_importer_cache) self.assert_(sys.path_importer_cache[path] is importer) + def test_path_importer_cache_has_None(self): + # Test that if sys.path_importer_cache has None that None is returned. + clear_cache = {path: None for path in sys.path} + with util.import_state(path_importer_cache=clear_cache): + for name in ('asynchat', 'sys', ''): + self.assert_(machinery.PathFinder.find_module(name) is None) + + def test_path_importer_cache_has_None_continues(self): + # Test that having None in sys.path_importer_cache causes the search to + # continue. + path = '' + module = '' + importer = util.mock_modules(module) + with util.import_state(path=['1', '2'], + path_importer_cache={'1': None, '2': importer}): + loader = machinery.PathFinder.find_module(module) + self.assert_(loader is importer) + + class DefaultPathFinderTests(unittest.TestCase):