Skip to content

set a default loop exception_handler that warns (similar to -p unraisablehook) #205

@graingert

Description

@graingert

consider the following test:

import pytest import asyncio @pytest.mark.asyncio async def test_foo(): def raise_(): raise Exception asyncio.get_running_loop().call_soon(raise_) await asyncio.sleep(0)

it passes cleanly.

However if you explicitly collect any errors:

import pytest import asyncio @pytest.mark.asyncio async def test_foo(): loop = asyncio.get_running_loop() old_exception_handler = loop.get_exception_handler() exceptions = [] def exception_handler(*args, **kwargs): exceptions.append((args, kwargs)) loop.set_exception_handler(exception_handler) try: def raise_(): raise Exception asyncio.get_running_loop().call_soon(raise_) await asyncio.sleep(0) assert exceptions == [] finally: loop.set_exception_handler(old_exception_handler)
=================================== test session starts ==================================== platform linux -- Python 3.9.2, pytest-6.2.2, py-1.10.0, pluggy-0.13.1 rootdir: /home/graingert/projects/anyio, configfile: pyproject.toml plugins: hypothesis-6.2.0, asyncio-0.14.0, anyio-2.1.0.post21+dirty collected 1 item ham.py F [100%] ========================================= FAILURES ========================================= _________________________________________ test_foo _________________________________________ ham.py:20: in test_foo assert exceptions == [] E AssertionError: assert [((<_UnixSele...py:15'}), {})] == [] E Left contains one more item: ((<_UnixSelectorEventLoop running=True closed=False debug=False>, {'exception': Exception(), 'handle': <Handle test_fo...y:15>, 'message': 'Exception in callback test_foo.<locals>.raise_() at /home/graingert/projects/anyio/ham.py:15'}), {}) E Use -v to get the full diff ==================================== 1 failed in 0.04s ==================================== 

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions