summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorravi140222 <100869741+ravi140222@users.noreply.github.com>2022-05-12 15:26:11 (GMT)
committerGitHub <noreply@github.com>2022-05-12 15:26:11 (GMT)
commit079f0dd7191fbadd4c3a5899b6af12492e84d2b4 (patch)
treea3fffb331db6c4cfc1affa57c3de19ba90eaabf3
parent8a0d9a6bb77a72cd8b9ece01b7c1163fff28029a (diff)
downloadcpython-079f0dd7191fbadd4c3a5899b6af12492e84d2b4.zip
cpython-079f0dd7191fbadd4c3a5899b6af12492e84d2b4.tar.gz
cpython-079f0dd7191fbadd4c3a5899b6af12492e84d2b4.tar.bz2
gh-91578: improved error message when trying to instantiate an abstract class with missing methods (gh-47246)
-rw-r--r--Lib/test/test_abc.py12
-rw-r--r--Lib/test/test_dataclasses.py2
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-04-15-22-12-53.gh-issue-91578.rDOtyK.rst1
-rw-r--r--Objects/typeobject.c2
4 files changed, 9 insertions, 8 deletions
diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py
index 1e7a035..a083236 100644
--- a/Lib/test/test_abc.py
+++ b/Lib/test/test_abc.py
@@ -154,7 +154,7 @@ def test_factory(abc_ABCMeta, abc_get_cache_token):
@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 test_factory(abc_ABCMeta, abc_get_cache_token):
@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 test_factory(abc_ABCMeta, abc_get_cache_token):
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 test_factory(abc_ABCMeta, abc_get_cache_token):
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 test_factory(abc_ABCMeta, abc_get_cache_token):
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 test_factory(abc_ABCMeta, abc_get_cache_token):
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 6a36da1..cf29cd0 100644
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -3762,7 +3762,7 @@ class TestAbstract(unittest.TestCase):
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 0000000..4dc738a
--- /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 1bcfd9a..1daf2b8 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);