diff Python/pythonrun.c @ 6322:05d943c4597c legacy-trunk

PyErr_Print(): When printing a class exception, try to dig out the __module__ string and if found, print <module>.<class>, unless <module> == "exceptions".
author Barry Warsaw <barry@python.org>
date Tue, 16 Sep 1997 21:42:03 +0000
parents 4cf20fa883a9
children dfeaf965f48a
line wrap: on
line diff
--- a/Python/pythonrun.c	Tue Sep 16 18:57:42 1997 +0000
+++ b/Python/pythonrun.c	Tue Sep 16 21:42:03 1997 +0000
@@ -745,13 +745,28 @@
 			/* Don't do anything else */
 		}
 		else if (PyClass_Check(exception)) {
-			PyObject* className =
-				((PyClassObject*)exception)->cl_name;
-			if (className == NULL)
+			PyClassObject* exc = (PyClassObject*)exception;
+			PyObject* className = exc->cl_name;
+			PyObject* moduleName =
+			      PyDict_GetItemString(exc->cl_dict, "__module__");
+
+			if (moduleName == NULL)
 				err = PyFile_WriteString("<unknown>", f);
-			else
-				err = PyFile_WriteObject(className, f,
-							 Py_PRINT_RAW);
+			else {
+				char* modstr = PyString_AsString(moduleName);
+				if (modstr && strcmp(modstr, "exceptions")) 
+				{
+					err = PyFile_WriteString(modstr, f);
+					err += PyFile_WriteString(".", f);
+				}
+			}
+			if (err == 0) {
+				if (className == NULL)
+				      err = PyFile_WriteString("<unknown>", f);
+				else
+				      err = PyFile_WriteObject(className, f,
+							       Py_PRINT_RAW);
+			}
 		}
 		else
 			err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);