diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index fc09aa0..20f775c 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -895,24 +895,24 @@
              do_something()
 
       The context manager will store the caught exception object in its
-      :attr:`exc_value` attribute.  This can be useful if the intention
+      :attr:`exception` attribute.  This can be useful if the intention
       is to perform additional checks on the exception raised::
 
         with self.assertRaises(SomeException) as cm:
             do_something()
 
-        the_exception = cm.exc_value
+        the_exception = cm.exception
         self.assertEqual(the_exception.error_code, 3)
 
-        .. versionchanged:: 3.1
+      .. versionchanged:: 3.1
          Added the ability to use :meth:`assertRaises` as a context manager.
 
+      .. versionchanged:: 3.2
+         Added the :attr:`exception` attribute.
+
       .. deprecated:: 3.1
          :meth:`failUnlessRaises`.
 
-      .. versionchanged:: 3.2
-         Added the :attr:`exc_value` attribute.
-
 
    .. method:: assertRaisesRegexp(exception, regexp[, callable, ...])
 
diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py
index e58c6b7..c944217 100644
--- a/Lib/test/test_unittest.py
+++ b/Lib/test/test_unittest.py
@@ -626,7 +626,6 @@
         # a good chance that it won't be imported when this test is run
         module_name = 'audioop'
 
-        import sys
         if module_name in sys.modules:
             del sys.modules[module_name]
 
@@ -1014,7 +1013,6 @@
         # a good chance that it won't be imported when this test is run
         module_name = 'audioop'
 
-        import sys
         if module_name in sys.modules:
             del sys.modules[module_name]
 
@@ -1972,8 +1970,6 @@
     # methods. Contains formatted tracebacks instead
     # of sys.exc_info() results."
     def test_addFailure(self):
-        import sys
-
         class Foo(unittest.TestCase):
             def test_1(self):
                 pass
@@ -2022,8 +2018,6 @@
     # methods. Contains formatted tracebacks instead
     # of sys.exc_info() results."
     def test_addError(self):
-        import sys
-
         class Foo(unittest.TestCase):
             def test_1(self):
                 pass
@@ -2861,7 +2855,7 @@
         ctx = self.assertRaises(ExceptionMock)
         with ctx:
             Stub(v)
-        e = ctx.exc_value
+        e = ctx.exception
         self.assertIsInstance(e, ExceptionMock)
         self.assertEqual(e.args[0], v)
 
@@ -3047,8 +3041,14 @@
             pass
         else:
             self.fail("assertRaises() didn't let exception pass through")
-        with self.assertRaises(KeyError):
-            raise KeyError
+        with self.assertRaises(KeyError) as cm:
+            try:
+                raise KeyError
+            except Exception as e:
+                exc = e
+                raise
+        self.assertIs(cm.exception, exc)
+
         with self.assertRaises(KeyError):
             raise KeyError("key")
         try:
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 8632652..a4e45aa 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -99,7 +99,7 @@
         self.expected_regex = expected_regexp
 
     def __enter__(self):
-        pass
+        return self
 
     def __exit__(self, exc_type, exc_value, tb):
         if exc_type is None:
@@ -116,8 +116,8 @@
         if not issubclass(exc_type, self.expected):
             # let unexpected exceptions pass through
             return False
-        #store exception, without traceback, for later retrieval
-        self.exc_value = exc_value.with_traceback(None)
+        # store exception, without traceback, for later retrieval
+        self.exception = exc_value.with_traceback(None)
         if self.expected_regex is None:
             return True
 
@@ -397,12 +397,12 @@
                     do_something()
 
            The context manager keeps a reference to the exception as
-           the exc_value attribute. This allows you to inspect the
+           the 'exception' attribute. This allows you to inspect the
            exception after the assertion::
 
                with self.assertRaises(SomeException) as cm:
                    do_something()
-               the_exception = cm.exc_value
+               the_exception = cm.exception
                self.assertEqual(the_exception.error_code, 3)
         """
         context = _AssertRaisesContext(excClass, self, callableObj)
