Closed
Description
Bug report
traceback.walk_stack(None)
omits the calling frame, making it equivalent to traceback.walk_stack(inspect.currentframe().f_back)
. Given the documentation just says "If f is None, the current stack is used.", I would have expected traceback.walk_stack(None)
to be equivalent to traceback.walk_stack(inspect.currentframe())
.
Example code
The following code
import traceback
import inspect
def abc():
print(list(traceback.walk_stack(None)))
print(list(traceback.walk_stack(inspect.currentframe())))
print(list(traceback.walk_stack(inspect.currentframe().f_back)))
abc()
has as output
[(<frame at 0x7f66ac559a40, file '/home/vincenttc/data/temp/test/test.py', line 10, code <module>>, 10)]
[(<frame at 0x7f66ac55fa60, file '/home/vincenttc/data/temp/test/test.py', line 7, code abc>, 7), (<frame at 0x7f66ac559a40, file '/home/vincenttc/data/temp/test/test.py', line 10, code <module>>, 10)]
[(<frame at 0x7f66ac559a40, file '/home/vincenttc/data/temp/test/test.py', line 10, code <module>>, 10)]
Note that the frame for abc
is missing in the first and last line.
Your environment
- CPython versions tested on: 3.8.10 (Ubuntu 20.04), 3.10.5 (Arch Linux)