diff options
author | Brett Cannon <bcannon@gmail.com> | 2009-08-30 04:29:47 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2009-08-30 04:29:47 (GMT) |
commit | 8a1a59f0eced3327ccf095a3de05701cdf379ab5 (patch) | |
tree | e9e6b7c1fae671e3eb3da088b07406498983f9d7 /Lib/importlib | |
parent | af0312af7a279ca1ec067728cd71cf8269b4f597 (diff) | |
download | cpython-8a1a59f0eced3327ccf095a3de05701cdf379ab5.zip cpython-8a1a59f0eced3327ccf095a3de05701cdf379ab5.tar.gz cpython-8a1a59f0eced3327ccf095a3de05701cdf379ab5.tar.bz2 |
Merged revisions 74584 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r74584 | brett.cannon | 2009-08-29 20:47:36 -0700 (Sat, 29 Aug 2009) | 3 lines
Have importlib raise ImportError if None is found in sys.modules. This matches
current import semantics.
........
Diffstat (limited to 'Lib/importlib')
-rw-r--r-- | Lib/importlib/_bootstrap.py | 7 | ||||
-rw-r--r-- | Lib/importlib/test/import_/test_caching.py | 18 |
2 files changed, 20 insertions, 5 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index ee3f1e6..24bcff2 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -860,7 +860,12 @@ def _gcd_import(name, package=None, level=0): name = package[:dot] with _ImportLockContext(): try: - return sys.modules[name] + module = sys.modules[name] + if module is None: + message = ("import of {} halted; " + "None in sys.modules".format(name)) + raise ImportError(message) + return module except KeyError: pass parent = name.rpartition('.')[0] diff --git a/Lib/importlib/test/import_/test_caching.py b/Lib/importlib/test/import_/test_caching.py index cf65b23..530b1a0 100644 --- a/Lib/importlib/test/import_/test_caching.py +++ b/Lib/importlib/test/import_/test_caching.py @@ -17,15 +17,25 @@ class UseCache(unittest.TestCase): loader returns) [from cache on return]. This also applies to imports of things contained within a package and thus get assigned as an attribute [from cache to attribute] or pulled in thanks to a fromlist import - [from cache for fromlist]. + [from cache for fromlist]. But if sys.modules contains None then + ImportError is raised [None in cache]. """ def test_using_cache(self): # [use cache] module_to_use = "some module found!" - sys.modules['some_module'] = module_to_use - module = import_util.import_('some_module') - self.assertEqual(id(module_to_use), id(module)) + with util.uncache(module_to_use): + sys.modules['some_module'] = module_to_use + module = import_util.import_('some_module') + self.assertEqual(id(module_to_use), id(module)) + + def test_None_in_cache(self): + #[None in cache] + name = 'using_None' + with util.uncache(name): + sys.modules[name] = None + with self.assertRaises(ImportError): + import_util.import_(name) def create_mock(self, *names, return_=None): mock = util.mock_modules(*names) |