From b05ee207513991541fe280e109a7aeb6eb6be9b6 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Mon, 4 May 2026 16:52:50 +0200 Subject: [PATCH] [3.14] gh-137337: Clarify import statement namespace binding (GH-144607) (GH-149369) It is not always in the local namespace. (cherry picked from commit b8ebd078f90007d48fcab85effadb33769cd080c) Co-authored-by: Kit Dallege --- Doc/reference/simple_stmts.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 36b30c9b16b..c990f89bfc2 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -760,8 +760,9 @@ The basic import statement (no :keyword:`from` clause) is executed in two steps: #. find a module, loading and initializing it if necessary -#. define a name or names in the local namespace for the scope where - the :keyword:`import` statement occurs. +#. define a name or names in the current namespace for the scope where + the :keyword:`import` statement occurs, just as an assignment statement + would (including :keyword:`global` and :keyword:`nonlocal` semantics). When the statement contains multiple clauses (separated by commas) the two steps are carried out separately for each clause, just @@ -806,7 +807,7 @@ The :keyword:`from` form uses a slightly more complex process: #. if not, attempt to import a submodule with that name and then check the imported module again for that attribute #. if the attribute is not found, :exc:`ImportError` is raised. - #. otherwise, a reference to that value is stored in the local namespace, + #. otherwise, a reference to that value is stored in the current namespace, using the name in the :keyword:`!as` clause if it is present, otherwise using the attribute name