summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/importlib/__init__.py2
-rw-r--r--Lib/importlib/test/test_api.py23
-rw-r--r--Misc/NEWS3
3 files changed, 26 insertions, 2 deletions
diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py
index e62bdb1..dad0833 100644
--- a/Lib/importlib/__init__.py
+++ b/Lib/importlib/__init__.py
@@ -7,7 +7,7 @@ import sys
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
index b7d6cb4..8431eab 100644
--- a/Lib/importlib/test/test_api.py
+++ b/Lib/importlib/test/test_api.py
@@ -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__':
diff --git a/Misc/NEWS b/Misc/NEWS
index b318e50..8c4aad2 100644
--- 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.