]> granicus.if.org Git - python/commitdiff
merge 3.4 (#23221)
authorBenjamin Peterson <benjamin@python.org>
Tue, 13 Jan 2015 14:20:31 +0000 (09:20 -0500)
committerBenjamin Peterson <benjamin@python.org>
Tue, 13 Jan 2015 14:20:31 +0000 (09:20 -0500)
1  2 
Doc/c-api/exceptions.rst
Doc/c-api/init.rst
Doc/distutils/apiref.rst
Doc/library/unittest.mock.rst
Lib/http/cookiejar.py
Lib/socket.py
Lib/test/test_argparse.py
Misc/ACKS

index bb8886d3f0942705f3511282149090e69fb66828,66b7752661d2e69a5af719231d6036e45d976157..814317b3593fbdc9d919fb42b3718325b49b6ecd
@@@ -334,139 -410,6 +334,139 @@@ an error value)
     .. versionadded:: 3.2
  
  
-       case of a class exception, or it may the a subclass of the expected exception.)
 +Querying the error indicator
 +============================
 +
 +.. c:function:: PyObject* PyErr_Occurred()
 +
 +   Test whether the error indicator is set.  If set, return the exception *type*
 +   (the first argument to the last call to one of the :c:func:`PyErr_Set\*`
 +   functions or to :c:func:`PyErr_Restore`).  If not set, return *NULL*.  You do not
 +   own a reference to the return value, so you do not need to :c:func:`Py_DECREF`
 +   it.
 +
 +   .. note::
 +
 +      Do not compare the return value to a specific exception; use
 +      :c:func:`PyErr_ExceptionMatches` instead, shown below.  (The comparison could
 +      easily fail since the exception may be an instance instead of a class, in the
++      case of a class exception, or it may be a subclass of the expected exception.)
 +
 +
 +.. c:function:: int PyErr_ExceptionMatches(PyObject *exc)
 +
 +   Equivalent to ``PyErr_GivenExceptionMatches(PyErr_Occurred(), exc)``.  This
 +   should only be called when an exception is actually set; a memory access
 +   violation will occur if no exception has been raised.
 +
 +
 +.. c:function:: int PyErr_GivenExceptionMatches(PyObject *given, PyObject *exc)
 +
 +   Return true if the *given* exception matches the exception type in *exc*.  If
 +   *exc* is a class object, this also returns true when *given* is an instance
 +   of a subclass.  If *exc* is a tuple, all exception types in the tuple (and
 +   recursively in subtuples) are searched for a match.
 +
 +
 +.. c:function:: void PyErr_Fetch(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback)
 +
 +   Retrieve the error indicator into three variables whose addresses are passed.
 +   If the error indicator is not set, set all three variables to *NULL*.  If it is
 +   set, it will be cleared and you own a reference to each object retrieved.  The
 +   value and traceback object may be *NULL* even when the type object is not.
 +
 +   .. note::
 +
 +      This function is normally only used by code that needs to catch exceptions or
 +      by code that needs to save and restore the error indicator temporarily, e.g.::
 +
 +         {
 +            PyObject **type, **value, **traceback;
 +            PyErr_Fetch(&type, &value, &traceback);
 +
 +            /* ... code that might produce other errors ... */
 +
 +            PyErr_Restore(type, value, traceback);
 +         }
 +
 +
 +.. c:function:: void PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)
 +
 +   Set  the error indicator from the three objects.  If the error indicator is
 +   already set, it is cleared first.  If the objects are *NULL*, the error
 +   indicator is cleared.  Do not pass a *NULL* type and non-*NULL* value or
 +   traceback.  The exception type should be a class.  Do not pass an invalid
 +   exception type or value. (Violating these rules will cause subtle problems
 +   later.)  This call takes away a reference to each object: you must own a
 +   reference to each object before the call and after the call you no longer own
 +   these references.  (If you don't understand this, don't use this function.  I
 +   warned you.)
 +
 +   .. note::
 +
 +      This function is normally only used by code that needs to save and restore the
 +      error indicator temporarily.  Use :c:func:`PyErr_Fetch` to save the current
 +      error indicator.
 +
 +
 +.. c:function:: void PyErr_NormalizeException(PyObject**exc, PyObject**val, PyObject**tb)
 +
 +   Under certain circumstances, the values returned by :c:func:`PyErr_Fetch` below
 +   can be "unnormalized", meaning that ``*exc`` is a class object but ``*val`` is
 +   not an instance of the  same class.  This function can be used to instantiate
 +   the class in that case.  If the values are already normalized, nothing happens.
 +   The delayed normalization is implemented to improve performance.
 +
 +   .. note::
 +
 +      This function *does not* implicitly set the ``__traceback__``
 +      attribute on the exception value. If setting the traceback
 +      appropriately is desired, the following additional snippet is needed::
 +
 +         if (tb != NULL) {
 +           PyException_SetTraceback(val, tb);
 +         }
 +
 +
 +.. c:function:: void PyErr_GetExcInfo(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback)
 +
 +   Retrieve the exception info, as known from ``sys.exc_info()``.  This refers
 +   to an exception that was *already caught*, not to an exception that was
 +   freshly raised.  Returns new references for the three objects, any of which
 +   may be *NULL*.  Does not modify the exception info state.
 +
 +   .. note::
 +
 +      This function is not normally used by code that wants to handle exceptions.
 +      Rather, it can be used when code needs to save and restore the exception
 +      state temporarily.  Use :c:func:`PyErr_SetExcInfo` to restore or clear the
 +      exception state.
 +
 +   .. versionadded:: 3.3
 +
 +
 +.. c:function:: void PyErr_SetExcInfo(PyObject *type, PyObject *value, PyObject *traceback)
 +
 +   Set the exception info, as known from ``sys.exc_info()``.  This refers
 +   to an exception that was *already caught*, not to an exception that was
 +   freshly raised.  This function steals the references of the arguments.
 +   To clear the exception state, pass *NULL* for all three arguments.
 +   For general rules about the three arguments, see :c:func:`PyErr_Restore`.
 +
 +   .. note::
 +
 +      This function is not normally used by code that wants to handle exceptions.
 +      Rather, it can be used when code needs to save and restore the exception
 +      state temporarily.  Use :c:func:`PyErr_GetExcInfo` to read the exception
 +      state.
 +
 +   .. versionadded:: 3.3
 +
 +
 +Signal Handling
 +===============
 +
 +
  .. c:function:: int PyErr_CheckSignals()
  
     .. index::
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc Lib/socket.py
Simple merge
Simple merge
diff --cc Misc/ACKS
Simple merge