[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