]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-105256: What's New note for comprehension over locals() (GH-106378) (#106471)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 6 Jul 2023 00:53:30 +0000 (17:53 -0700)
committerGitHub <noreply@github.com>
Thu, 6 Jul 2023 00:53:30 +0000 (18:53 -0600)
gh-105256: What's New note for comprehension over locals() (GH-106378)
(cherry picked from commit 13aefd175e3c04529251f175c23cb3ed88451fd0)

Co-authored-by: Carl Meyer <carl@oddbird.net>
Doc/whatsnew/3.12.rst

index ec13ed57a5c45d22065408b898615753ce893317..eba3e226fa372c41fe22ad88707319f70c2ed12a 100644 (file)
@@ -253,6 +253,12 @@ Inlining does result in a few visible behavior changes:
 * Calling :func:`locals` inside a comprehension now includes variables
   from outside the comprehension, and no longer includes the synthetic ``.0``
   variable for the comprehension "argument".
+* A comprehension iterating directly over ``locals()`` (e.g. ``[k for k in
+  locals()]``) may see "RuntimeError: dictionary changed size during iteration"
+  when run under tracing (e.g. code coverage measurement). This is the same
+  behavior already seen in e.g. ``for k in locals():``. To avoid the error, first
+  create a list of keys to iterate over: ``keys = list(locals()); [k for k in
+  keys]``.
 
 Contributed by Carl Meyer and Vladimir Matveev in :pep:`709`.