From 2376fe76c774506125c0543a9978d1bc162c13d8 Mon Sep 17 00:00:00 2001 From: Thomas Grainger Date: Wed, 2 Nov 2022 16:45:17 +0000 Subject: [PATCH 1/3] GH-96092: restore frame height of traceback.walk_stack to that of python 3.10 --- Lib/test/test_traceback.py | 1 + Lib/traceback.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index 149d0234fe8a72..aab1efe914f81e 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -2243,6 +2243,7 @@ def deeper(): return list(traceback.walk_stack(None)) s1 = list(traceback.walk_stack(None)) s2 = deeper() + self.assertIs(s2[0][0].f_code, deeper.__code__) self.assertEqual(len(s2) - len(s1), 1) self.assertEqual(s2[1:], s1) diff --git a/Lib/traceback.py b/Lib/traceback.py index cf5f355ff04c3b..7ee83dd67c25cd 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -330,7 +330,7 @@ def walk_stack(f): current stack is used. Usually used with StackSummary.extract. """ if f is None: - f = sys._getframe().f_back.f_back.f_back.f_back + f = sys._getframe().f_back.f_back while f is not None: yield f, f.f_lineno f = f.f_back From b5eb38bd237586a4231dc6fdb9394c249d913d82 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:47:16 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2022-11-02-16-47-13.gh-issue-96092.7Fz0P1.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2022-11-02-16-47-13.gh-issue-96092.7Fz0P1.rst diff --git a/Misc/NEWS.d/next/Library/2022-11-02-16-47-13.gh-issue-96092.7Fz0P1.rst b/Misc/NEWS.d/next/Library/2022-11-02-16-47-13.gh-issue-96092.7Fz0P1.rst new file mode 100644 index 00000000000000..d9702d09d07537 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-11-02-16-47-13.gh-issue-96092.7Fz0P1.rst @@ -0,0 +1 @@ +restore frame height of :func:`traceback.walk_stack` to that of python 3.10 From bdc5814a92e6b278590322c0c3c8740acdfbc2d7 Mon Sep 17 00:00:00 2001 From: Thomas Grainger Date: Thu, 3 Nov 2022 10:10:56 +0000 Subject: [PATCH 3/3] Update Lib/test/test_traceback.py --- Lib/test/test_traceback.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index aab1efe914f81e..5d895749d693fa 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -2243,9 +2243,17 @@ def deeper(): return list(traceback.walk_stack(None)) s1 = list(traceback.walk_stack(None)) s2 = deeper() - self.assertIs(s2[0][0].f_code, deeper.__code__) self.assertEqual(len(s2) - len(s1), 1) self.assertEqual(s2[1:], s1) + + def test_walk_stack_frame(): + gen = traceback.walk_stack(None) + def deep(): + def deeper(): + return list(gen)[0][0] + return deeper() + + self.assertIs(deep().f_code, deep.__code__) def test_walk_tb(self): try: