summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_frame.py
diff options
context:
space:
mode:
authorAlbert Zeyer <albzey@gmail.com>2024-01-31 19:14:44 (GMT)
committerGitHub <noreply@github.com>2024-01-31 19:14:44 (GMT)
commit78c254582b1757c15098ae65e97a2589ae663cd7 (patch)
tree62424661fd61ba9f10f52155801ff24f1ab110ce /Lib/test/test_frame.py
parentb905fad83819ec9102ecfb97e3d8ab0aaddd9784 (diff)
downloadcpython-78c254582b1757c15098ae65e97a2589ae663cd7.zip
cpython-78c254582b1757c15098ae65e97a2589ae663cd7.tar.gz
cpython-78c254582b1757c15098ae65e97a2589ae663cd7.tar.bz2
gh-113939: Frame clear, clear locals (#113940)
Diffstat (limited to 'Lib/test/test_frame.py')
-rw-r--r--Lib/test/test_frame.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py
index 7f17666..244ce8a 100644
--- a/Lib/test/test_frame.py
+++ b/Lib/test/test_frame.py
@@ -55,6 +55,28 @@ class ClearTest(unittest.TestCase):
# The reference was released by .clear()
self.assertIs(None, wr())
+ def test_clear_locals_after_f_locals_access(self):
+ # see gh-113939
+ class C:
+ pass
+
+ wr = None
+ def inner():
+ nonlocal wr
+ c = C()
+ wr = weakref.ref(c)
+ 1/0
+
+ try:
+ inner()
+ except ZeroDivisionError as exc:
+ support.gc_collect()
+ self.assertIsNotNone(wr())
+ print(exc.__traceback__.tb_next.tb_frame.f_locals)
+ exc.__traceback__.tb_next.tb_frame.clear()
+ support.gc_collect()
+ self.assertIsNone(wr())
+
def test_clear_does_not_clear_specials(self):
class C:
pass