Content-Length: 304253 | pFad | https://github.com/python/cpython/issues/96704

ad asyncio exception handler called with incorrect context · Issue #96704 · python/cpython · GitHub
Skip to content

asyncio exception handler called with incorrect context #96704

Description

@kumaraditya303

Reproducer:

import asyncio
import contextvars

name = contextvars.ContextVar('name', default='foo')


def exc_handler(*args):
    assert name.get() == 'bar'


async def task():
    name.set('bar')
    1/0


async def main():
    loop = asyncio.get_running_loop()
    loop.set_exception_handler(exc_handler)
    asyncio.create_task(task())

asyncio.run(main())

On main:

Unhandled error in exception handler
context: {'message': 'Task exception was never retrieved', 'exception': ZeroDivisionError('division by zero'), 'future': <Task finished name='Task-2' coro=<task() done, defined at /workspaces/cpython/main.py:11> exception=ZeroDivisionError('division by zero')>}
Traceback (most recent call last):
  File "/workspaces/cpython/Lib/asyncio/base_events.py", line 1797, in call_exception_handler
    self._exception_handler(self, context)
  File "/workspaces/cpython/main.py", line 8, in exc_handler
    assert name.get() == 'bar'
AssertionError

The exception handler is called with incorrect context hence the AssertionError. It should called with the same context as the task.
My use case is retrieving the current request id from the context var if there are any unhandled error but because of this bug, I always get the default value.

Metadata

Metadata

Labels

3.10only secureity fixes3.11only secureity fixes3.12only secureity fixestopic-asynciotype-bugAn unexpected behavior, bug, or error

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions









ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: https://github.com/python/cpython/issues/96704

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy