Add a SubprocessError base class for exceptions in the subprocess module.
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst
index bb6e68b..6ea3c10 100644
--- a/Doc/library/subprocess.rst
+++ b/Doc/library/subprocess.rst
@@ -387,6 +387,11 @@
 :func:`call` and :meth:`Popen.communicate` will raise :exc:`TimeoutExpired` if
 the timeout expires before the process exits.
 
+Exceptions defined in this module all inherit from :ext:`SubprocessError`.
+
+   .. versionadded:: 3.3
+      The :exc:`SubprocessError` base class was added.
+
 
 Security
 ^^^^^^^^
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index c8af5d1..874aea7 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -191,8 +191,10 @@
 
 A ValueError will be raised if Popen is called with invalid arguments.
 
-check_call() and check_output() will raise CalledProcessError, if the
-called process returns a non-zero return code.
+Exceptions defined within this module inherit from SubprocessError.
+check_call() and check_output() will raise CalledProcessError if the
+called process returns a non-zero return code.  TimeoutExpired 
+be raised if a timeout was specified and expired.
 
 
 Security
@@ -348,7 +350,10 @@
 import warnings
 
 # Exception classes used by this module.
-class CalledProcessError(Exception):
+class SubprocessError(Exception): pass
+
+
+class CalledProcessError(SubprocessError):
     """This exception is raised when a process run by check_call() or
     check_output() returns a non-zero exit status.
     The exit status will be stored in the returncode attribute;
@@ -362,7 +367,7 @@
         return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
 
 
-class TimeoutExpired(Exception):
+class TimeoutExpired(SubprocessError):
     """This exception is raised when the timeout expires while waiting for a
     child process.
     """