[New-bugs-announce] [issue2506] Line tracing of continue after always-taken if is incorrect
Ned Batchelder
report at bugs.python.org
Sat Mar 29 14:38:41 CET 2008
New submission from Ned Batchelder <nedbat at users.sourceforge.net>:
When tracing line execution with sys.settrace, a particular code
structure fails to report an executed line. The line is a continue
statement after an if condition in which the if condition is true every
time it is executed.
Attached is a file with two copies of the same code, except in the first
the if condition is always true, and in the second it is sometimes true.
In the first, trace.py reports that the continue is never executed,
even though it is (as evidenced from the values of a, b, and c after
execution).
In the second code, the continue is properly reported.
This bug has been present since version 2.3. 2.2 does not exhibit it
(trace.py didn't exist in 2.2, but coverage.py shows the problem also).
To see the problem, execute "trace.py -c -m continue.py". Then
continue.py.cover will show:
1: a = b = c = 0
101: for n in range(100):
100: if n % 2:
50: if n % 4:
50: a += 1
>>>>>> continue
else:
50: b += 1
50: c += 1
1: assert a == 50 and b == 50 and c == 50
1: a = b = c = 0
101: for n in range(100):
100: if n % 2:
50: if n % 3:
33: a += 1
17: continue
else:
50: b += 1
50: c += 1
1: assert a == 33 and b == 50 and c == 50
----------
components: Interpreter Core
files: continue.py
messages: 64692
nosy: nedbat
severity: normal
status: open
title: Line tracing of continue after always-taken if is incorrect
type: behavior
versions: Python 2.3, Python 2.4, Python 2.5, Python 2.6
Added file: http://bugs.python.org/file9888/continue.py
__________________________________
Tracker <report at bugs.python.org>
<http://bugs.python.org/issue2506>
__________________________________
More information about the New-bugs-announce
mailing list