[Python-checkins] gh-91578: improved error message when trying to instantiate an abstract class with missing methods (gh-47246)

ericvsmith webhook-mailer at python.org
Thu May 12 11:26:16 EDT 2022


https://github.com/python/cpython/commit/079f0dd7191fbadd4c3a5899b6af12492e84d2b4
commit: 079f0dd7191fbadd4c3a5899b6af12492e84d2b4
branch: main
author: ravi140222 <100869741+ravi140222 at users.noreply.github.com>
committer: ericvsmith <ericvsmith at users.noreply.github.com>
date: 2022-05-12T11:26:11-04:00
summary:

gh-91578: improved error message when trying to instantiate an abstract class with missing methods (gh-47246)

files:
A Misc/NEWS.d/next/Core and Builtins/2022-04-15-22-12-53.gh-issue-91578.rDOtyK.rst
M Lib/test/test_abc.py
M Lib/test/test_dataclasses.py
M Objects/typeobject.c

diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py
index 1e7a0351db489..a083236fb0fc4 100644
--- a/Lib/test/test_abc.py
+++ b/Lib/test/test_abc.py
@@ -154,7 +154,7 @@ class C(metaclass=abc_ABCMeta):
                 @abc.abstractmethod
                 def method_one(self):
                     pass
-            msg = r"class C with abstract method method_one"
+            msg = r"class C without an implementation for abstract method method_one"
             self.assertRaisesRegex(TypeError, msg, C)
 
         def test_object_new_with_many_abstractmethods(self):
@@ -165,7 +165,7 @@ def method_one(self):
                 @abc.abstractmethod
                 def method_two(self):
                     pass
-            msg = r"class C with abstract methods method_one, method_two"
+            msg = r"class C without an implementation for abstract methods method_one, method_two"
             self.assertRaisesRegex(TypeError, msg, C)
 
         def test_abstractmethod_integration(self):
@@ -535,7 +535,7 @@ def updated_foo(self):
             A.foo = updated_foo
             abc.update_abstractmethods(A)
             self.assertEqual(A.__abstractmethods__, {'foo', 'bar'})
-            msg = "class A with abstract methods bar, foo"
+            msg = "class A without an implementation for abstract methods bar, foo"
             self.assertRaisesRegex(TypeError, msg, A)
 
         def test_update_implementation(self):
@@ -547,7 +547,7 @@ def foo(self):
             class B(A):
                 pass
 
-            msg = "class B with abstract method foo"
+            msg = "class B without an implementation for abstract method foo"
             self.assertRaisesRegex(TypeError, msg, B)
             self.assertEqual(B.__abstractmethods__, {'foo'})
 
@@ -605,7 +605,7 @@ def foo(self):
 
             abc.update_abstractmethods(B)
 
-            msg = "class B with abstract method foo"
+            msg = "class B without an implementation for abstract method foo"
             self.assertRaisesRegex(TypeError, msg, B)
 
         def test_update_layered_implementation(self):
@@ -627,7 +627,7 @@ def foo(self):
 
             abc.update_abstractmethods(C)
 
-            msg = "class C with abstract method foo"
+            msg = "class C without an implementation for abstract method foo"
             self.assertRaisesRegex(TypeError, msg, C)
 
         def test_update_multi_inheritance(self):
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
index 6a36da104ac89..cf29cd07516f0 100644
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -3762,7 +3762,7 @@ class Date(A):
             day: 'int'
 
         self.assertTrue(inspect.isabstract(Date))
-        msg = 'class Date with abstract method foo'
+        msg = 'class Date without an implementation for abstract method foo'
         self.assertRaisesRegex(TypeError, msg, Date)
 
 
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-04-15-22-12-53.gh-issue-91578.rDOtyK.rst b/Misc/NEWS.d/next/Core and Builtins/2022-04-15-22-12-53.gh-issue-91578.rDOtyK.rst
new file mode 100644
index 0000000000000..4dc738ab9051a
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-04-15-22-12-53.gh-issue-91578.rDOtyK.rst	
@@ -0,0 +1 @@
+Updates the error message for abstract class.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 1bcfd9a9c52bc..1daf2b8d3b0ff 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4559,7 +4559,7 @@ object_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 
         PyErr_Format(PyExc_TypeError,
                      "Can't instantiate abstract class %s "
-                     "with abstract method%s %U",
+                     "without an implementation for abstract method%s %U",
                      type->tp_name,
                      method_count > 1 ? "s" : "",
                      joined);



More information about the Python-checkins mailing list