bpo-29922: Improve error messages in 'async with' (GH-6352)

when __aenter__() or __aexit__() return non-awaitable object.
This commit is contained in:
Serhiy Storchaka 2018-04-03 01:41:38 +03:00 committed by GitHub
parent 55966f3a0d
commit a68f2f0578
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 4 deletions

View file

@ -1255,7 +1255,9 @@ class CoroutineTest(unittest.TestCase):
pass
with self.assertRaisesRegex(
TypeError, "object int can't be used in 'await' expression"):
TypeError,
"'async with' received an object from __aenter__ "
"that does not implement __await__: int"):
# it's important that __aexit__ wasn't called
run_async(foo())
@ -1275,7 +1277,9 @@ class CoroutineTest(unittest.TestCase):
run_async(foo())
except TypeError as exc:
self.assertRegex(
exc.args[0], "object int can't be used in 'await' expression")
exc.args[0],
"'async with' received an object from __aexit__ "
"that does not implement __await__: int")
self.assertTrue(exc.__context__ is not None)
self.assertTrue(isinstance(exc.__context__, ZeroDivisionError))
else:
@ -1299,8 +1303,9 @@ class CoroutineTest(unittest.TestCase):
with self.assertRaisesRegex(
TypeError, "object int can't be used in 'await' expression"):
TypeError,
"'async with' received an object from __aexit__ "
"that does not implement __await__: int"):
run_async(foo())
self.assertEqual(CNT, 1)