]> granicus.if.org Git - python/commitdiff
Issue #15210: If _frozen_importlib is not found in sys.modules by
authorBrett Cannon <brett@python.org>
Mon, 2 Jul 2012 18:53:10 +0000 (14:53 -0400)
committerBrett Cannon <brett@python.org>
Mon, 2 Jul 2012 18:53:10 +0000 (14:53 -0400)
importlib.__init__, then catch the KeyError raised, not ImportError.

Lib/importlib/__init__.py
Lib/importlib/test/test_api.py
Misc/NEWS

index e62bdb1654e553fda484eb7088cd2325657e0c59..dad0833fce003978d1250afd1b87c1f854b6b949 100644 (file)
@@ -7,7 +7,7 @@ import sys
 
 try:
     _bootstrap = sys.modules['_frozen_importlib']
-except ImportError:
+except KeyError:
     from . import _bootstrap
     _bootstrap._setup(sys, imp)
 else:
index b7d6cb4effe186c3eda064b37b08acdb02f4da1f..8431eab6f7deadb1147e24753a27d9d5bf6ebb83 100644 (file)
@@ -160,9 +160,30 @@ class InvalidateCacheTests(unittest.TestCase):
         importlib.invalidate_caches()  # Shouldn't trigger an exception.
 
 
+class FrozenImportlibTests(unittest.TestCase):
+
+    def test_no_frozen_importlib(self):
+        # Should be able to import w/o _frozen_importlib being defined.
+        modules = {}
+        for name in ('importlib', 'importlib.__init__', 'importlib._bootstrap',
+                     '_frozen_importlib'):
+            try:
+                modules[name] = sys.modules[name]
+                del sys.modules[name]
+            except KeyError:
+                continue
+        modules['_frozen_importlib'] = None
+        import importlib
+        for name, module in modules.items():
+            sys.modules[name] = module
+
+
 def test_main():
     from test.support import run_unittest
-    run_unittest(ImportModuleTests, FindLoaderTests, InvalidateCacheTests)
+    run_unittest(ImportModuleTests,
+                 FindLoaderTests,
+                 InvalidateCacheTests,
+                 FrozenImportlibTests)
 
 
 if __name__ == '__main__':
index b318e503fd46319f6d5f313efbb3e020f32eb985..8c4aad2b6ba3ef4246c08c544fdfab0b154937eb 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #15210: Catch KeyError when imprortlib.__init__ can't find
+  _frozen_importlib in sys.modules, not ImportError.
+
 - Issue #15030: importlib.abc.PyPycLoader now supports the new source size
   header field in .pyc files.