-
- Notifications
You must be signed in to change notification settings - Fork 33.1k
Closed
Labels
3.12only security fixesonly security fixes3.13bugs and security fixesbugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)release-blockertype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
With the following demo code, a subgenerator yield from
from a parent generator main(), that catches exceptions and returns "good":
class Inner: def send(self, v): return None def __iter__(self): return self def __next__(self): return self.send(None) def throw(self, *exc_info): raise StopIteration("good") def main(): return (yield from Inner()) def run(coro): coro.send(None) try: coro.throw(Exception) except StopIteration as e: print(e.value) run(main())
when run with python -m trace
, the exception is delivered to the outer generator main() instead of being suppressed
graingert@conscientious ~/projects/cpython main ./python -m trace --count -C . demo.py Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/home/graingert/projects/cpython/Lib/trace.py", line 741, in <module> main() File "/home/graingert/projects/cpython/Lib/trace.py", line 729, in main t.runctx(code, globs, globs) File "/home/graingert/projects/cpython/Lib/trace.py", line 451, in runctx exec(cmd, globals, locals) File "demo.py", line 26, in <module> run(main()) File "demo.py", line 21, in run coro.throw(Exception) File "demo.py", line 16, in main return (yield from Inner()) ^^^^^^^^^^^^^^^^^^ Exception ✘ graingert@conscientious ~/projects/cpython main ± ./python demo.py good
the problem also occurs with the equivalent generator syntax, eg:
def Inner(): try: while True: yield None except: return "good"
Your environment
- CPython versions tested on: c05c31d 3.12b1
- Operating system and architecture: Ubuntu 22.04 x86_64
see also
urllib3/urllib3#3049 (comment)
nedbat/coveragepy#1635
Linked PRs
Metadata
Metadata
Assignees
Labels
3.12only security fixesonly security fixes3.13bugs and security fixesbugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)release-blockertype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
Done