[Python-Dev] Issue 2986: difflib.SequenceMatcher is partly broken

Terry Reedy tjreedy at udel.edu
Wed Jul 14 20:32:17 CEST 2010


On 7/14/2010 9:45 AM, Nick Coghlan wrote:

> Code that sets the flag would behave the same on both 2.7.1+ and on
> 2.7.0, it would just fail to turn the heuristic off in 2.7.0.

Antoine Pitrou pointed out on the tracker
http://bugs.python.org/issue2986
that such code would *not* 'behave the same'. It would return different 
results (thus failing tests, if any). If, as would usually be the case, 
it *needs* the heuristic turned off to get sensible results, it would 
fail silently and deceptively. He thinks it better to fail noisily with 
an exception.

Any code that depends on an x.y.z bugfix for proper operation and does 
not include conditional workaround for prior releases, will fail when 
run on prior releases. Whether the failure is a bad result (silent) or 
bad exception (noisy) usually depends on what the buggy behavior was.

This case is an exception in that
a. There is no workaround.
b. A complete fix requires some api change.
c. We have a choice of changes; some make failures on previous x.y 
releases silent (as they have been), others make them noisy -- without 
doing anything extra to make them noisy[*].
d. Hence we have a choice of failure mode.

Hence the exceptional debate.

[*] For the normal case of bad behavior for some input, we change the 
code to give the correct behavior. Raising an exception with previous 
releases would require extra conditional code. Here, by the nature of 
heuristic, there is no completely correct fix except to be able to turn 
it off. (If there were a correct deterministic rule, it would not be a 
heuristic ;=). The mechanism for turning it off might or might not raise 
an exception 'for free', with no added code for that.

-- 
Terry Jan Reedy



More information about the Python-Dev mailing list