]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-35486: Note Py3.6 import system API requirement change (GH-11540) (GH-11588)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 18 Jan 2019 01:11:09 +0000 (17:11 -0800)
committerNed Deily <nad@python.org>
Fri, 18 Jan 2019 01:11:09 +0000 (20:11 -0500)
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 <ncoghlan@gmail.com>
Doc/library/importlib.rst
Doc/whatsnew/3.6.rst

index 25055f7ce39cf5b9265cefea96112140a99ee1a9..30293d4d985ea677d40240ba9821fb2b4c4c485e 100644 (file)
@@ -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
index 009584428fc1b83094da29404713a30393326842..bd5c6340130ec15b70d932e6bc373f2a3ac3071f 100644 (file)
@@ -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
 --------------------