diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2003-07-01 15:12:33 +0000 |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2003-07-01 15:12:33 +0000 |
commit | 4e2badcd5e5d8158116cd314f737616a7f6dc5ca (patch) | |
tree | 6ae47fc2024a225d018dbabab26210b35179d4f9 | |
parent | 8b9025b4c7c9a20b60f9bb3fa58419b3adae77a2 (diff) | |
download | cpython-4e2badcd5e5d8158116cd314f737616a7f6dc5ca.tar.gz |
Fix SF bug #763023, difflib.py: ratio() zero division not caught
-rw-r--r-- | Lib/difflib.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 11 insertions, 3 deletions
diff --git a/Lib/difflib.py b/Lib/difflib.py index 97ced5f88e..ec9eb6c4e8 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -24,6 +24,11 @@ Class Differ: __all__ = ['get_close_matches', 'ndiff', 'restore', 'SequenceMatcher', 'Differ', 'IS_CHARACTER_JUNK', 'IS_LINE_JUNK'] +def _calculate_ratio(matches, length): + if length: + return 2.0 * matches / length + return 1.0 + class SequenceMatcher: """ @@ -525,7 +530,7 @@ class SequenceMatcher: 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. @@ -554,7 +559,7 @@ class SequenceMatcher: 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. @@ -566,7 +571,7 @@ class SequenceMatcher: 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. @@ -5,6 +5,9 @@ What's New in Python 2.2.4? - SF #753592: webchecker/wsgui now handles user supplied directories. +- SF bug 763023: fix uncaught ZeroDivisionError in difflib ratio methods + when there are no lines. + What's New in Python 2.2.3 (final) ? Release date: 30-May-2003 ==================================== |