summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorJacob Bower <1978924+jbower-fb@users.noreply.github.com>2024-11-21 23:37:49 (GMT)
committerGitHub <noreply@github.com>2024-11-21 23:37:49 (GMT)
commite8bb05394164e7735f7a9de80a046953606a38eb (patch)
treed1dc0f67f289679e66355f220b264b480f533b0a /Lib
parent3fafc1bd83d1f2c19f124d234a0ece988dad8b0a (diff)
downloadcpython-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.py22
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):