mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-102493: fix normalization in PyErr_SetObject (#102502)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
54060ae91d
commit
a33ca2ad1f
4 changed files with 56 additions and 4 deletions
|
@ -140,6 +140,34 @@ class Test_ErrSetAndRestore(unittest.TestCase):
|
|||
self.assertEqual(1, v.args[0])
|
||||
self.assertIs(tb, v.__traceback__.tb_next)
|
||||
|
||||
def test_set_object(self):
|
||||
|
||||
# new exception as obj is not an exception
|
||||
with self.assertRaises(ValueError) as e:
|
||||
_testcapi.exc_set_object(ValueError, 42)
|
||||
self.assertEqual(e.exception.args, (42,))
|
||||
|
||||
# wraps the exception because unrelated types
|
||||
with self.assertRaises(ValueError) as e:
|
||||
_testcapi.exc_set_object(ValueError, TypeError(1,2,3))
|
||||
wrapped = e.exception.args[0]
|
||||
self.assertIsInstance(wrapped, TypeError)
|
||||
self.assertEqual(wrapped.args, (1, 2, 3))
|
||||
|
||||
# is superclass, so does not wrap
|
||||
with self.assertRaises(PermissionError) as e:
|
||||
_testcapi.exc_set_object(OSError, PermissionError(24))
|
||||
self.assertEqual(e.exception.args, (24,))
|
||||
|
||||
class Meta(type):
|
||||
def __subclasscheck__(cls, sub):
|
||||
1/0
|
||||
|
||||
class Broken(Exception, metaclass=Meta):
|
||||
pass
|
||||
|
||||
with self.assertRaises(ZeroDivisionError) as e:
|
||||
_testcapi.exc_set_object(Broken, Broken())
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue