diff options
author | Jacob Bower <1978924+jbower-fb@users.noreply.github.com> | 2024-11-21 23:37:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-21 23:37:49 (GMT) |
commit | e8bb05394164e7735f7a9de80a046953606a38eb (patch) | |
tree | d1dc0f67f289679e66355f220b264b480f533b0a /Lib | |
parent | 3fafc1bd83d1f2c19f124d234a0ece988dad8b0a (diff) | |
download | cpython-e8bb05394164e7735f7a9de80a046953606a38eb.zip cpython-e8bb05394164e7735f7a9de80a046953606a38eb.tar.gz cpython-e8bb05394164e7735f7a9de80a046953606a38eb.tar.bz2 |
gh-126091: Always link generator frames when propagating a thrown-in exception through a yield-from chain (#126092)
Always link generator frames when propagating a thrown-in exception through a yield-from chain.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_generators.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index bf2cb11..2ea6dba 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -758,7 +758,8 @@ class GeneratorStackTraceTest(unittest.TestCase): while frame: name = frame.f_code.co_name # Stop checking frames when we get to our test helper. - if name.startswith('check_') or name.startswith('call_'): + if (name.startswith('check_') or name.startswith('call_') + or name.startswith('test')): break names.append(name) @@ -799,6 +800,25 @@ class GeneratorStackTraceTest(unittest.TestCase): self.check_yield_from_example(call_throw) + def test_throw_with_yield_from_custom_generator(self): + + class CustomGen: + def __init__(self, test): + self.test = test + def throw(self, *args): + self.test.check_stack_names(sys._getframe(), ['throw', 'g']) + def __iter__(self): + return self + def __next__(self): + return 42 + + def g(target): + yield from target + + gen = g(CustomGen(self)) + gen.send(None) + gen.throw(RuntimeError) + class YieldFromTests(unittest.TestCase): def test_generator_gi_yieldfrom(self): |