Closed
Description
I'm experimenting with the new monitoring interface in PEP 669. The LINE event happens multiple times for the line in the body of a for loop (as I expect), but the for statement itself only gets an event on entering, not each time around the loop.
This code:
import sys
def loop3():
for i in range(3):
print(i)
print("done")
the_code = loop3.__code__
def line_callback(code, line_number):
assert code == the_code
print(f"LINE: {line_number}")
my_id = sys.monitoring.COVERAGE_ID
sys.monitoring.use_tool_id(my_id, "repro")
sys.monitoring.register_callback(my_id, sys.monitoring.events.LINE, line_callback)
sys.monitoring.set_local_events(my_id, the_code, sys.monitoring.events.LINE)
loop3()
produces:
LINE: 4
LINE: 5
0
LINE: 5
1
LINE: 5
2
LINE: 6
done
I would expect Line 4 to be monitored after each "LINE: 5", including after the last one.
This is with commit 263abd3 of CPython.