gh-95882: fix regression in the traceback of exceptions propagated from inside a contextlib context manager (#95883)

This commit is contained in:
Thomas Grainger 2023-01-03 15:47:13 +00:00 committed by GitHub
parent 8586949833
commit b3722ca058
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 90 additions and 4 deletions

View file

@ -173,7 +173,7 @@ class _GeneratorContextManager(
isinstance(value, StopIteration)
and exc.__cause__ is value
):
exc.__traceback__ = traceback
value.__traceback__ = traceback
return False
raise
except BaseException as exc:
@ -228,6 +228,7 @@ class _AsyncGeneratorContextManager(
except RuntimeError as exc:
# Don't re-raise the passed in exception. (issue27122)
if exc is value:
exc.__traceback__ = traceback
return False
# Avoid suppressing if a Stop(Async)Iteration exception
# was passed to athrow() and later wrapped into a RuntimeError
@ -239,6 +240,7 @@ class _AsyncGeneratorContextManager(
isinstance(value, (StopIteration, StopAsyncIteration))
and exc.__cause__ is value
):
value.__traceback__ = traceback
return False
raise
except BaseException as exc:
@ -250,6 +252,7 @@ class _AsyncGeneratorContextManager(
# and the __exit__() protocol.
if exc is not value:
raise
exc.__traceback__ = traceback
return False
raise RuntimeError("generator didn't stop after athrow()")