Index: Lib/unittest/test/test_case.py =================================================================== --- Lib/unittest/test/test_case.py (revision 87151) +++ Lib/unittest/test/test_case.py (working copy) @@ -1126,3 +1126,24 @@ # exercise the TestCase instance in a way that will invoke # the type equality lookup mechanism unpickled_test.assertEqual(set(), set()) + + # Following tow tests are addressed at issue 10611. + # When SystemExit or GeneratorExit is raised in testMethod, the test + # stops. + def testSystemExitOccurred(self): + def raise_systemexit_method(self): + raise SystemExit + class TestSystemExitOccurred(unittest.TestCase): + setUp = raise_systemexit_method + test = raise_systemexit_method + tearDown = raise_systemexit_method + TestSystemExitOccurred('test').run() + + def testGeneratorExitOccurred(self): + def raise_generatorexit_method(self): + raise GeneratorExit + class TestGeneratorExitOccurred(unittest.TestCase): + setUp = raise_generatorexit_method + test = raise_generatorexit_method + tearDown = raise_generatorexit_method + TestGeneratorExitOccurred('test').run() Index: Lib/unittest/case.py =================================================================== --- Lib/unittest/case.py (revision 87151) +++ Lib/unittest/case.py (working copy) @@ -395,7 +395,9 @@ self.setUp() except SkipTest as e: self._addSkip(result, str(e)) - except Exception: + except KeyboardInterrupt: + raise + except BaseException: result.addError(self, sys.exc_info()) else: try: @@ -420,14 +422,18 @@ result.addFailure(self, sys.exc_info()) except SkipTest as e: self._addSkip(result, str(e)) - except Exception: + except KeyboardInterrupt: + raise + except BaseException: result.addError(self, sys.exc_info()) else: success = True try: self.tearDown() - except Exception: + except KeyboardInterrupt: + raise + except BaseException: result.addError(self, sys.exc_info()) success = False