import asyncio import unittest async def it(raise_, ignore=True): yield 1 if not ignore: await asyncio.sleep(0.01) try: raise ValueError('test2') from raise_ except Exception: import traceback traceback.print_exc() if ignore: pass else: raise await asyncio.sleep(0.1) yield 2 class MyTest(unittest.TestCase): def test(self): try: raise ValueError('testerror') except ValueError as e: exc = e async def task1(): with self.assertRaises(ValueError): async for i in it(exc, False): print("task1: ", i) async def task2(): async for i in it(exc, True): print("task2: ", i) async def main(): t1 = asyncio.ensure_future(task1()) t2 = asyncio.ensure_future(task2()) await t1 await t2 asyncio.get_event_loop().run_until_complete(main()) if __name__ == '__main__': unittest.main()