Issue #28214: Improved exception reporting for problematic __set_name__

attributes.
This commit is contained in:
Serhiy Storchaka 2016-10-21 17:13:31 +03:00
parent 467ab194fc
commit d5d32d2127
3 changed files with 28 additions and 8 deletions

View file

@ -133,20 +133,32 @@ class Test(unittest.TestCase):
def test_set_name_error(self):
class Descriptor:
def __set_name__(self, owner, name):
raise RuntimeError
1/0
with self.assertRaises(RuntimeError):
class A:
d = Descriptor()
with self.assertRaises(RuntimeError) as cm:
class NotGoingToWork:
attr = Descriptor()
exc = cm.exception
self.assertRegex(str(exc), r'\bNotGoingToWork\b')
self.assertRegex(str(exc), r'\battr\b')
self.assertRegex(str(exc), r'\bDescriptor\b')
self.assertIsInstance(exc.__cause__, ZeroDivisionError)
def test_set_name_wrong(self):
class Descriptor:
def __set_name__(self):
pass
with self.assertRaises(TypeError):
class A:
d = Descriptor()
with self.assertRaises(RuntimeError) as cm:
class NotGoingToWork:
attr = Descriptor()
exc = cm.exception
self.assertRegex(str(exc), r'\bNotGoingToWork\b')
self.assertRegex(str(exc), r'\battr\b')
self.assertRegex(str(exc), r'\bDescriptor\b')
self.assertIsInstance(exc.__cause__, TypeError)
def test_set_name_lookup(self):
resolved = []