From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Fri, 18 Jan 2019 01:11:09 +0000 (-0800) Subject: bpo-35486: Note Py3.6 import system API requirement change (GH-11540) (GH-11588) X-Git-Tag: v3.6.9rc1~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1edb3dc6ff70db88a7e89586578e58a86ee0e75e;p=thirdparty%2FPython%2Fcpython.git bpo-35486: Note Py3.6 import system API requirement change (GH-11540) (GH-11588) While the introduction of ModuleNotFoundError was fully backwards compatible on the import API consumer side, folks providing alternative implementations of `__import__` need to make an update to be forward compatible with clients that start relying on the new subclass. https://bugs.python.org/issue35486 (cherry picked from commit cee29b46a19116261b083dc803217aa754c7df40) Co-authored-by: Nick Coghlan --- diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index 25055f7ce39c..30293d4d985e 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -1488,7 +1488,8 @@ Python 3.6 and newer for other parts of the code). if spec is not None: break else: - raise ImportError(f'No module named {absolute_name!r}') + msg = f'No module named {absolute_name!r}' + raise ModuleNotFoundError(msg, name=absolute_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) sys.modules[absolute_name] = module diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst index 009584428fc1..bd5c6340130e 100644 --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -2328,6 +2328,17 @@ Changes in the Python API a :exc:`DeprecationWarning` in Python 3.6 and a :exc:`RuntimeError` in Python 3.8. +* With the introduction of :exc:`ModuleNotFoundError`, import system consumers + may start expecting import system replacements to raise that more specific + exception when appropriate, rather than the less-specific :exc:`ImportError`. + To provide future compatibility with such consumers, implementors of + alternative import systems that completely replace :func:`__import__` will + need to update their implementations to raise the new subclass when a module + can't be found at all. Implementors of compliant plugins to the default + import system shouldn't need to make any changes, as the default import + system will raise the new subclass when appropriate. + + Changes in the C API --------------------