summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-03-25 00:40:59 +0100
committerVictor Stinner <victor.stinner@gmail.com>2016-03-25 00:40:59 +0100
commita8820508b0669f0ac2f2099f440da68fd30b9d47 (patch)
tree3556e385949d25e2415dee835a2d2ca788c4f609 /Lib
parent4bce73e77a3f79f90bc407fc952569d46cb4fd2d (diff)
downloadcpython-a8820508b0669f0ac2f2099f440da68fd30b9d47.tar.gz
Fix bug in __import__ during Python shutdown
Issue #26637: The importlib module now emits an ImportError rather than a TypeError if __import__() is tried during the Python shutdown process but sys.path is already cleared (set to None).
Diffstat (limited to 'Lib')
-rw-r--r--Lib/importlib/_bootstrap.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 880c493ddc..fa99f5600f 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -878,13 +878,20 @@ def _find_spec_legacy(finder, name, path):
def _find_spec(name, path, target=None):
"""Find a module's loader."""
- if sys.meta_path is not None and not sys.meta_path:
+ meta_path = sys.meta_path
+ if meta_path is None:
+ # PyImport_Cleanup() is running or has been called.
+ raise ImportError("sys.meta_path is None, Python is likely "
+ "shutting down")
+
+ if not meta_path:
_warnings.warn('sys.meta_path is empty', ImportWarning)
+
# We check sys.modules here for the reload case. While a passed-in
# target will usually indicate a reload there is no guarantee, whereas
# sys.modules provides one.
is_reload = name in sys.modules
- for finder in sys.meta_path:
+ for finder in meta_path:
with _ImportLockContext():
try:
find_spec = finder.find_spec