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)