bpo-35712: Make using NotImplemented in a boolean context issue a deprecation warning (GH-13195)
diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py
index 6178ffd..2ddca06 100644
--- a/Lib/test/test_buffer.py
+++ b/Lib/test/test_buffer.py
@@ -2528,7 +2528,7 @@
values = [INT(9), IDX(9),
2.2+3j, Decimal("-21.1"), 12.2, Fraction(5, 2),
[1,2,3], {4,5,6}, {7:8}, (), (9,),
- True, False, None, NotImplemented,
+ True, False, None, Ellipsis,
b'a', b'abc', bytearray(b'a'), bytearray(b'abc'),
'a', 'abc', r'a', r'abc',
f, lambda x: x]
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 5c553a9..e50c273 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1666,6 +1666,20 @@
self.assertRaises(TypeError, tp, 1, 2)
self.assertRaises(TypeError, tp, a=1, b=2)
+ def test_warning_notimplemented(self):
+ # Issue #35712: NotImplemented is a sentinel value that should never
+ # be evaluated in a boolean context (virtually all such use cases
+ # are a result of accidental misuse implementing rich comparison
+ # operations in terms of one another).
+ # For the time being, it will continue to evaluate as truthy, but
+ # issue a deprecation warning (with the eventual intent to make it
+ # a TypeError).
+ self.assertWarns(DeprecationWarning, bool, NotImplemented)
+ with self.assertWarns(DeprecationWarning):
+ self.assertTrue(NotImplemented)
+ with self.assertWarns(DeprecationWarning):
+ self.assertFalse(not NotImplemented)
+
class TestBreakpoint(unittest.TestCase):
def setUp(self):
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index d2e1218..96cc8de2 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -2526,9 +2526,9 @@
except TypeError:
pass
- # Two essentially featureless objects, just inheriting stuff from
- # object.
- self.assertEqual(dir(NotImplemented), dir(Ellipsis))
+ # Two essentially featureless objects, (Ellipsis just inherits stuff
+ # from object.
+ self.assertEqual(dir(object()), dir(Ellipsis))
# Nasty test case for proxied objects
class Wrapper(object):