diff Python/errors.c @ 57962:c1972eef3579

Merged revisions 77088 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r77088 | georg.brandl | 2009-12-28 09:34:58 +0100 (Mo, 28 Dez 2009) | 1 line #7033: add new API function PyErr_NewExceptionWithDoc, for easily giving new exceptions a docstring. ........
author Georg Brandl <georg@python.org>
date Mon, 28 Dec 2009 08:41:01 +0000
parents 77cfef596d33
children 3357b8ebb259
line wrap: on
line diff
--- a/Python/errors.c	Mon Dec 28 08:10:38 2009 +0000
+++ b/Python/errors.c	Mon Dec 28 08:41:01 2009 +0000
@@ -693,6 +693,41 @@
 	return result;
 }
 
+
+/* Create an exception with docstring */
+PyObject *
+PyErr_NewExceptionWithDoc(const char *name, const char *doc,
+			  PyObject *base, PyObject *dict)
+{
+	int result;
+	PyObject *ret = NULL;
+	PyObject *mydict = NULL; /* points to the dict only if we create it */
+	PyObject *docobj;
+
+	if (dict == NULL) {
+		dict = mydict = PyDict_New();
+		if (dict == NULL) {
+			return NULL;
+		}
+	}
+
+	if (doc != NULL) {
+		docobj = PyUnicode_FromString(doc);
+		if (docobj == NULL)
+			goto failure;
+		result = PyDict_SetItemString(dict, "__doc__", docobj);
+		Py_DECREF(docobj);
+		if (result < 0)
+			goto failure;
+	}
+
+	ret = PyErr_NewException(name, base, dict);
+  failure:
+	Py_XDECREF(mydict);
+	return ret;
+}
+
+
 /* Call when an exception has occurred but there is no way for Python
    to handle it.  Examples: exception in __del__ or during GC. */
 void