[Python-checkins] cpython: Issue #15210: If _frozen_importlib is not found in sys.modules by

brett.cannon python-checkins at python.org
Mon Jul 2 20:53:15 CEST 2012


http://hg.python.org/cpython/rev/818db871d29a
changeset:   77916:818db871d29a
user:        Brett Cannon <brett at python.org>
date:        Mon Jul 02 14:53:10 2012 -0400
summary:
  Issue #15210: If _frozen_importlib is not found in sys.modules by
importlib.__init__, then catch the KeyError raised, not ImportError.

files:
  Lib/importlib/__init__.py      |   2 +-
  Lib/importlib/test/test_api.py |  23 +++++++++++++++++++++-
  Misc/NEWS                      |   3 ++
  3 files changed, 26 insertions(+), 2 deletions(-)


diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py
--- a/Lib/importlib/__init__.py
+++ b/Lib/importlib/__init__.py
@@ -7,7 +7,7 @@
 
 try:
     _bootstrap = sys.modules['_frozen_importlib']
-except ImportError:
+except KeyError:
     from . import _bootstrap
     _bootstrap._setup(sys, imp)
 else:
diff --git a/Lib/importlib/test/test_api.py b/Lib/importlib/test/test_api.py
--- a/Lib/importlib/test/test_api.py
+++ b/Lib/importlib/test/test_api.py
@@ -160,9 +160,30 @@
         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__':
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,9 @@
 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.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list