mirror of
https://github.com/python/cpython.git
synced 2025-10-21 22:22:48 +00:00
PyErr_Print(): When printing a class exception, try to dig out the
__module__ string and if found, print <module>.<class>, unless <module> == "exceptions".
This commit is contained in:
parent
b81b5c72db
commit
2f5f6a2595
1 changed files with 21 additions and 6 deletions
|
@ -745,13 +745,28 @@ PyErr_Print()
|
||||||
/* Don't do anything else */
|
/* Don't do anything else */
|
||||||
}
|
}
|
||||||
else if (PyClass_Check(exception)) {
|
else if (PyClass_Check(exception)) {
|
||||||
PyObject* className =
|
PyClassObject* exc = (PyClassObject*)exception;
|
||||||
((PyClassObject*)exception)->cl_name;
|
PyObject* className = exc->cl_name;
|
||||||
if (className == NULL)
|
PyObject* moduleName =
|
||||||
|
PyDict_GetItemString(exc->cl_dict, "__module__");
|
||||||
|
|
||||||
|
if (moduleName == NULL)
|
||||||
err = PyFile_WriteString("<unknown>", f);
|
err = PyFile_WriteString("<unknown>", f);
|
||||||
else
|
else {
|
||||||
err = PyFile_WriteObject(className, f,
|
char* modstr = PyString_AsString(moduleName);
|
||||||
Py_PRINT_RAW);
|
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
|
else
|
||||||
err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
|
err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue