Ok, read the source this time: PyErr_SetObject() does not steal a reference.
diff --git a/Doc/api/exceptions.tex b/Doc/api/exceptions.tex
index 88bf00d..6163666 100644
--- a/Doc/api/exceptions.tex
+++ b/Doc/api/exceptions.tex
@@ -124,7 +124,7 @@
\begin{cfuncdesc}{void}{PyErr_SetObject}{PyObject *type, PyObject *value}
This function is similar to \cfunction{PyErr_SetString()} but lets
you specify an arbitrary Python object for the ``value'' of the
- exception. One reference to \var{value} is stolen.
+ exception.
\end{cfuncdesc}
\begin{cfuncdesc}{PyObject*}{PyErr_Format}{PyObject *exception,