diff -r f5dec8c57715 Lib/collections/abc.py --- a/Lib/collections/abc.py Wed Oct 31 10:52:16 2012 -0400 +++ b/Lib/collections/abc.py Wed Oct 31 19:52:14 2012 +0200 @@ -200,12 +200,12 @@ def __gt__(self, other): if not isinstance(other, Set): return NotImplemented - return other < self + return other.__lt__(self) def __ge__(self, other): if not isinstance(other, Set): return NotImplemented - return other <= self + return other.__le__(self) def __eq__(self, other): if not isinstance(other, Set): diff -r f5dec8c57715 Lib/test/test_collections.py --- a/Lib/test/test_collections.py Wed Oct 31 10:52:16 2012 -0400 +++ b/Lib/test/test_collections.py Wed Oct 31 19:52:14 2012 +0200 @@ -663,6 +663,39 @@ s |= s self.assertEqual(s, full) + def test_issue16373(self): + # Recursion error comparing comparable and noncomparable + # Set instances + class MyComparableSet(Set): + def __contains__(self, x): + return False + def __len__(self): + return 0 + def __iter__(self): + return iter([]) + class MyNonComparableSet(Set): + def __contains__(self, x): + return False + def __len__(self): + return 0 + def __iter__(self): + return iter([]) + def __le__(self, x): + return NotImplemented + def __lt__(self, x): + return NotImplemented + + cs = MyComparableSet() + ncs = MyNonComparableSet() + with self.assertRaises(TypeError): + ncs < cs + with self.assertRaises(TypeError): + ncs <= cs + with self.assertRaises(TypeError): + cs > ncs + with self.assertRaises(TypeError): + cs >= ncs + def test_Mapping(self): for sample in [dict]: self.assertIsInstance(sample(), Mapping)