Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
GH-96092: restore frame height of traceback.walk_stack to that of pyt…#99015
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Conversation
ammaraskar commentedNov 2, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Aah I think I see how these incorrect In Line 417 in908e81f
Since cpython/Lib/test/test_traceback.py Line 2324 inc053284
simply instantiates it. Only in _extract_from_extended_frame_gen does the codeiffisNone:f=sys._getframe().f_back.f_back get invoked and by that point we are already inside of the Since this code path was originally
and the lack of direct tests for it in the commit adding it seems to suggest so:6bc2c1e#diff-8a52124ffceebd98f91bf96caa0f341ae109f79e190cd5acc1c56c8968d75252R514 One possible fix is to make |
Uh oh!
There was an error while loading.Please reload this page.
seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)
ammaraskar commentedNov 4, 2022
Here's my recommended fix for this: diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.pyindex 149d0234fe..48d5c1a809 100644--- a/Lib/test/test_traceback.py+++ b/Lib/test/test_traceback.py@@ -2241,8 +2241,7 @@ class TestStack(unittest.TestCase): def test_walk_stack(self): def deeper(): return list(traceback.walk_stack(None))- s1 = list(traceback.walk_stack(None))- s2 = deeper()+ s1, s2 = list(traceback.walk_stack(None)), deeper() self.assertEqual(len(s2) - len(s1), 1) self.assertEqual(s2[1:], s1)diff --git a/Lib/traceback.py b/Lib/traceback.pyindex cf5f355ff0..701ce9e4bb 100644--- a/Lib/traceback.py+++ b/Lib/traceback.py@@ -323,17 +323,21 @@ def line(self): return self._line.strip()-def walk_stack(f):+def walk_stack(frame): """Walk a stack yielding the frame and line number for each frame. This will follow f.f_back from the given frame. If no frame is given, the current stack is used. Usually used with StackSummary.extract. """- if f is None:- f = sys._getframe().f_back.f_back.f_back.f_back- while f is not None:- yield f, f.f_lineno- f = f.f_back+ if frame is None:+ frame = sys._getframe().f_back++ def walk_stack_generator(f):+ while f is not None:+ yield f, f.f_lineno+ f = f.f_back++ return walk_stack_generator(frame) As mentioned in the comment on the issue, this is a change in behavior we should definitely have a NEWS entry and documentation change. Code in practice is unlikely to break due to it.@graingert, would you like to take this on? |
seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)
seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)
seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)
seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)
seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)
* use sys.executable for python binary* pass the desired frame to traceback.walk_stack for 3.11seepython/cpython#96092and it's not really intended for use outside of StackSummary.extract,seepython/cpython#99015 (comment)* the GC overhead now depends on _PyType_PreHeaderSizefaster-cpython/ideas#125python/cpython@8319114#diff-a3a5c73931235f7f344c072dc755d6508e13923db3f5d581c5e88652075871cbR1684*GH-6785: asyncio.wait no longer calls ensure_futurepython/cpython#95601* test on python 3.11* exclude macos py 3.10
Uh oh!
There was an error while loading.Please reload this page.
…hon 3.10