Mercurial > cpython-lru_cache-weakref
diff Lib/difflib.py @ 29719:fa4cf878c538 legacy-trunk
Fix SF bug #763023, difflib.py: ratio() zero division not caught
Backport candidate
| author | Neal Norwitz <nnorwitz@gmail.com> |
|---|---|
| date | Tue, 01 Jul 2003 14:59:46 +0000 |
| parents | 94ac1d42a420 |
| children | 9ca291865f9c |
line wrap: on
line diff
--- a/Lib/difflib.py Tue Jul 01 14:49:32 2003 +0000 +++ b/Lib/difflib.py Tue Jul 01 14:59:46 2003 +0000 @@ -29,6 +29,11 @@ 'Differ','IS_CHARACTER_JUNK', 'IS_LINE_JUNK', 'context_diff', 'unified_diff'] +def _calculate_ratio(matches, length): + if length: + return 2.0 * matches / length + return 1.0 + class SequenceMatcher: """ @@ -611,7 +616,7 @@ matches = reduce(lambda sum, triple: sum + triple[-1], self.get_matching_blocks(), 0) - return 2.0 * matches / (len(self.a) + len(self.b)) + return _calculate_ratio(matches, len(self.a) + len(self.b)) def quick_ratio(self): """Return an upper bound on ratio() relatively quickly. @@ -640,7 +645,7 @@ avail[elt] = numb - 1 if numb > 0: matches = matches + 1 - return 2.0 * matches / (len(self.a) + len(self.b)) + return _calculate_ratio(matches, len(self.a) + len(self.b)) def real_quick_ratio(self): """Return an upper bound on ratio() very quickly. @@ -652,7 +657,7 @@ la, lb = len(self.a), len(self.b) # can't have more matches than the number of elements in the # shorter sequence - return 2.0 * min(la, lb) / (la + lb) + return _calculate_ratio(min(la, lb), la + lb) def get_close_matches(word, possibilities, n=3, cutoff=0.6): """Use SequenceMatcher to return list of the best "good enough" matches.
