PEP 669: for loop fires LINE multiple times for body, but only one for `for`
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.