Commit 8e26b337 authored by Victor Stinner's avatar Victor Stinner

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).
parent 09f7cc8c
......@@ -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
......
......@@ -232,6 +232,11 @@ Core and Builtins
Library
-------
- Issue #26637: The :mod:`importlib` module now emits an :exc:`ImportError`
rather than a :exc:`TypeError` if :func:`__import__` is tried during the
Python shutdown process but :data:`sys.path` is already cleared (set to
``None``).
- Issue #21925: :func:`warnings.formatwarning` now catches exceptions when
calling :func;`linecache.getline` and
:func:`tracemalloc.get_object_traceback` to be able to log
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment