diff --git a/contextlib2.py b/contextlib2.py index 29df1b7..a70e8cd 100644 --- a/contextlib2.py +++ b/contextlib2.py @@ -133,7 +133,7 @@ class _GeneratorContextManager(ContextDecorator): # Likewise, avoid suppressing if a StopIteration exception # was passed to throw() and later wrapped into a RuntimeError # (see PEP 479). - if _HAVE_EXCEPTION_CHAINING and exc.__cause__ is value: + if exc.__cause__ is value: return False raise except: diff --git a/test_contextlib2.py b/test_contextlib2.py index 66d2587..994798d 100755 --- a/test_contextlib2.py +++ b/test_contextlib2.py @@ -418,9 +418,6 @@ class TestContextDecorator(unittest.TestCase): test('something else') self.assertEqual(state, [1, 'something else', 999]) -# Detailed exception chaining checks only make sense on Python 3 -check_exception_chaining = contextlib2._HAVE_EXCEPTION_CHAINING - class TestExitStack(unittest.TestCase): @requires_docstrings @@ -589,18 +586,16 @@ class TestExitStack(unittest.TestCase): with RaiseExc(ValueError): 1 / 0 except IndexError as exc: - if check_exception_chaining: - self.assertIsInstance(exc.__context__, KeyError) - self.assertIsInstance(exc.__context__.__context__, AttributeError) - # Inner exceptions were suppressed - self.assertIsNone(exc.__context__.__context__.__context__) + self.assertIsInstance(exc.__context__, KeyError) + self.assertIsInstance(exc.__context__.__context__, AttributeError) + # Inner exceptions were suppressed + self.assertIsNone(exc.__context__.__context__.__context__) else: self.fail("Expected IndexError, but no exception was raised") # Check the inner exceptions inner_exc = SuppressExc.saved_details[1] self.assertIsInstance(inner_exc, ValueError) - if check_exception_chaining: - self.assertIsInstance(inner_exc.__context__, ZeroDivisionError) + self.assertIsInstance(inner_exc.__context__, ZeroDivisionError) def test_exit_exception_chaining(self): # Ensure exception chaining matches the reference behaviour @@ -621,18 +616,16 @@ class TestExitStack(unittest.TestCase): stack.callback(raise_exc, ValueError) 1 / 0 except IndexError as exc: - if check_exception_chaining: - self.assertIsInstance(exc.__context__, KeyError) - self.assertIsInstance(exc.__context__.__context__, AttributeError) - # Inner exceptions were suppressed - self.assertIsNone(exc.__context__.__context__.__context__) + self.assertIsInstance(exc.__context__, KeyError) + self.assertIsInstance(exc.__context__.__context__, AttributeError) + # Inner exceptions were suppressed + self.assertIsNone(exc.__context__.__context__.__context__) else: self.fail("Expected IndexError, but no exception was raised") # Check the inner exceptions inner_exc = saved_details[0][1] self.assertIsInstance(inner_exc, ValueError) - if check_exception_chaining: - self.assertIsInstance(inner_exc.__context__, ZeroDivisionError) + self.assertIsInstance(inner_exc.__context__, ZeroDivisionError) def test_exit_exception_non_suppressing(self): # http://bugs.python.org/issue19092 @@ -686,12 +679,11 @@ class TestExitStack(unittest.TestCase): raise exc1 except Exception as exc: self.assertIs(exc, exc4) - if check_exception_chaining: - self.assertIs(exc.__context__, exc3) - self.assertIs(exc.__context__.__context__, exc2) - self.assertIs(exc.__context__.__context__.__context__, exc1) - self.assertIsNone( - exc.__context__.__context__.__context__.__context__) + self.assertIs(exc.__context__, exc3) + self.assertIs(exc.__context__.__context__, exc2) + self.assertIs(exc.__context__.__context__.__context__, exc1) + self.assertIsNone( + exc.__context__.__context__.__context__.__context__) def test_exit_exception_with_existing_context(self): # Addresses a lack of test coverage discovered after checking in a @@ -713,16 +705,13 @@ class TestExitStack(unittest.TestCase): raise exc1 except Exception as exc: self.assertIs(exc, exc5) - if check_exception_chaining: - self.assertIs(exc.__context__, exc4) - self.assertIs(exc.__context__.__context__, exc3) - self.assertIs(exc.__context__.__context__.__context__, exc2) - self.assertIs( - exc.__context__.__context__.__context__.__context__, exc1) - self.assertIsNone( - exc.__context__.__context__.__context__.__context__.__context__) - - + self.assertIs(exc.__context__, exc4) + self.assertIs(exc.__context__.__context__, exc3) + self.assertIs(exc.__context__.__context__.__context__, exc2) + self.assertIs( + exc.__context__.__context__.__context__.__context__, exc1) + self.assertIsNone( + exc.__context__.__context__.__context__.__context__.__context__) def test_body_exception_suppress(self): def suppress_exc(*exc_details): @@ -821,10 +810,9 @@ class TestExitStack(unittest.TestCase): exc = err_ctx.exception self.assertIsInstance(exc, UniqueException) self.assertIsInstance(exc.__cause__, UniqueRuntimeError) - if check_exception_chaining: - self.assertIs(exc.__context__, exc.__cause__) - self.assertIsNone(exc.__cause__.__context__) - self.assertIsNone(exc.__cause__.__cause__) + self.assertIs(exc.__context__, exc.__cause__) + self.assertIsNone(exc.__cause__.__context__) + self.assertIsNone(exc.__cause__.__cause__) class TestRedirectStream: