context = cm.exception.__context__
self.assertEqual((type(context), context.args), (KeyError, ('a',)))
+ def test_exception_context_with_yield_inside_generator(self):
+ # Check that the context is also available from inside the generator
+ # with yield, as opposed to outside.
+ def f():
+ try:
+ raise KeyError('a')
+ except Exception:
+ try:
+ yield
+ except Exception as exc:
+ self.assertEqual(type(exc), ValueError)
+ context = exc.__context__
+ self.assertEqual((type(context), context.args),
+ (KeyError, ('a',)))
+ yield 'b'
+
+ gen = f()
+ gen.send(None)
+ actual = gen.throw(ValueError)
+ # This ensures that the assertions inside were executed.
+ self.assertEqual(actual, 'b')
+
def test_exception_context_with_yield_from(self):
def f():
yield