Closed as not planned
Description
Bug report
Bug description:
White space causes inconsistent frame traversal in With blocks
Consider
with open( # 0
a # 1
) as b: # 2
pass # 3
frame order goes:
2, 3, 0
versus
with open(a) as b: # 0
pass # 1
frame order goes 1, 0
This doesn't seem right, many formatters will make this adjustment as an expected NoOp.
Code to reproduce the behaviour:
import traceback
import sys
def trace(*args, **kwargs):
stack = traceback.extract_stack()
for frame in stack[::-1]:
_filename, lineno, function_name, _code = frame
if function_name in ("bar", "foo"):
print("trace", frame.lineno)
class Context():
def __enter__(self):
frame = sys._getframe(1)
self.old = frame.f_trace
sys.settrace(lambda *_args, **_keys: None)
frame.f_trace = trace
def __exit__(self, *kwargs):
sys.settrace(self.old)
def foo():
with Context() as f:
stack = traceback.extract_stack()
print("---")
for frame in stack[::-1]:
_filename, lineno, function_name, _code = frame
if function_name == "foo":
print(frame.lineno, lineno)
break
print("Foo")
foo()
Foo
trace 3
trace 4
---
trace 5
trace 6
trace 7
trace 8
3 3
trace 9
trace 2
def bar():
with Context(
) as f: # NOTE: line break here !
stack = traceback.extract_stack()
print("---")
for frame in stack[::-1]:
_filename, lineno, function_name, _code = frame
if function_name == "bar":
print(frame.lineno, lineno)
break
print("Bar")
bar()
Bar
trace 3
trace 4
trace 5
---
trace 6
trace 7
trace 8
trace 9
4 4
trace 10
trace 2
Expected behaviour
Foo
trace 3
trace 4
---
trace 5
trace 6
trace 7
trace 8
3 3
trace 9
trace 2
Bar
trace 4
trace 5
---
trace 6
trace 7
trace 8
trace 9
4 4
trace 10
trace 2 (or trace 3)
or maybe in the context of debuggers setting break points
Foo
trace 2
trace 3
trace 4
---
trace 5
trace 6
trace 7
trace 8
3 3
trace 9
trace 2
Bar
trace 3
trace 4
trace 5
---
trace 6
trace 7
trace 8
trace 9
4 4
trace 10
trace 2
Additional context
Please point me to where in the documentation if this is expected behavior,
The inconsistency seems like a bug to me.
Here's a wasm notebook, but I did test it locally as well: https://marimo.app/l/0eld5u
CPython versions tested on:
3.10, 3.11, 3.12
Operating systems tested on:
Linux, Other