Index: Python/ceval.c =================================================================== --- Python/ceval.c (revision 65920) +++ Python/ceval.c (working copy) @@ -2453,7 +2453,7 @@ if (b->b_type == EXCEPT_HANDLER) { UNWIND_EXCEPT_HANDLER(b); - if (why == WHY_EXCEPTION) { + if (why == WHY_EXCEPTION && !throwflag) { Py_CLEAR(tstate->exc_type); Py_CLEAR(tstate->exc_value); Py_CLEAR(tstate->exc_traceback); Index: Lib/test/test_exceptions.py =================================================================== --- Lib/test/test_exceptions.py (revision 65920) +++ Lib/test/test_exceptions.py (working copy) @@ -564,6 +564,28 @@ pass self.assertEquals(e, (None, None, None)) + def test_3118(self): + def gen(): + try: + yield 1 + finally: + pass + + def f(): + g = gen() + next(g) + try: + try: + raise ValueError + except: + del g + raise KeyError + except Exception as e: + self.assert_(isinstance(e.__context__, ValueError)) + + f() + + def test_badisinstance(self): # Bug #2542: if issubclass(e, MyException) raises an exception, # it should be ignored