diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2022-01-02 23:22:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-02 23:22:42 (GMT) |
commit | 65e7c1f90e9136fc61f4af029b065d9f6c5664c3 (patch) | |
tree | bf322965684bd0eeef7c220c5d1cb8307933cbb7 /Lib | |
parent | 8e75c6b49b7cb8515b917f01b32ece8c8ea2c0a0 (diff) | |
download | cpython-65e7c1f90e9136fc61f4af029b065d9f6c5664c3.zip cpython-65e7c1f90e9136fc61f4af029b065d9f6c5664c3.tar.gz cpython-65e7c1f90e9136fc61f4af029b065d9f6c5664c3.tar.bz2 |
bpo-46219, 46221: simplify except* implementation following exc_info changes. Move helpers to exceptions.c. Do not assume that exception groups are truthy. (GH-30289)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/importlib/_bootstrap_external.py | 3 | ||||
-rw-r--r-- | Lib/test/test_except_star.py | 28 |
2 files changed, 30 insertions, 1 deletions
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 5ead6ca..095c127 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -375,6 +375,7 @@ _code_type = type(_write_atomic.__code__) # Python 3.11a4 3467 (Change CALL_xxx opcodes) # Python 3.11a4 3468 (Add SEND opcode) # Python 3.11a4 3469 (bpo-45711: remove type, traceback from exc_info) +# Python 3.11a4 3470 (bpo-46221: PREP_RERAISE_STAR no longer pushes lasti) # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -384,7 +385,7 @@ _code_type = type(_write_atomic.__code__) # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3469).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3470).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Lib/test/test_except_star.py b/Lib/test/test_except_star.py index b03de9c..490b159 100644 --- a/Lib/test/test_except_star.py +++ b/Lib/test/test_except_star.py @@ -952,6 +952,34 @@ class TestExceptStarExceptionGroupSubclass(ExceptStarTest): self.assertEqual(teg.code, 42) self.assertEqual(teg.exceptions[0].code, 101) + def test_falsy_exception_group_subclass(self): + class FalsyEG(ExceptionGroup): + def __bool__(self): + return False + + def derive(self, excs): + return FalsyEG(self.message, excs) + + try: + try: + raise FalsyEG("eg", [TypeError(1), ValueError(2)]) + except *TypeError as e: + tes = e + raise + except *ValueError as e: + ves = e + pass + except Exception as e: + exc = e + + for e in [tes, ves, exc]: + self.assertFalse(e) + self.assertIsInstance(e, FalsyEG) + + self.assertExceptionIsLike(exc, FalsyEG("eg", [TypeError(1)])) + self.assertExceptionIsLike(tes, FalsyEG("eg", [TypeError(1)])) + self.assertExceptionIsLike(ves, FalsyEG("eg", [ValueError(2)])) + class TestExceptStarCleanup(ExceptStarTest): def test_exc_info_restored(self): |