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
Bug report
Bug description:
White space causes inconsistent frame traversal in With blocks
Consider
frame order goes:
2, 3, 0
versus
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:
Expected behaviour
or maybe in the context of debuggers setting break points
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