summaryrefslogtreecommitdiffstats
path: root/Python/errors.c
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2021-09-03 07:30:17 (GMT)
committerGitHub <noreply@github.com>2021-09-03 07:30:17 (GMT)
commitb4b6342848ec0459182a992151099252434cc619 (patch)
tree049ee796fb01dee4844bccc61fb7427eb169ccf4 /Python/errors.c
parenta1e15a7a604e6f44cdaf4e106339df62eac5dc9f (diff)
downloadcpython-b4b6342848ec0459182a992151099252434cc619.zip
cpython-b4b6342848ec0459182a992151099252434cc619.tar.gz
cpython-b4b6342848ec0459182a992151099252434cc619.tar.bz2
bpo-45083: Include the exception class qualname when formatting an exception (GH-28119)
Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
Diffstat (limited to 'Python/errors.c')
-rw-r--r--Python/errors.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/Python/errors.c b/Python/errors.c
index ae1cde6..15ca21b 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -1287,46 +1287,45 @@ write_unraisable_exc_file(PyThreadState *tstate, PyObject *exc_type,
}
assert(PyExceptionClass_Check(exc_type));
- const char *className = PyExceptionClass_Name(exc_type);
- if (className != NULL) {
- const char *dot = strrchr(className, '.');
- if (dot != NULL) {
- className = dot+1;
- }
- }
- PyObject *moduleName = _PyObject_GetAttrId(exc_type, &PyId___module__);
- if (moduleName == NULL || !PyUnicode_Check(moduleName)) {
- Py_XDECREF(moduleName);
+ PyObject *modulename = _PyObject_GetAttrId(exc_type, &PyId___module__);
+ if (modulename == NULL || !PyUnicode_Check(modulename)) {
+ Py_XDECREF(modulename);
_PyErr_Clear(tstate);
if (PyFile_WriteString("<unknown>", file) < 0) {
return -1;
}
}
else {
- if (!_PyUnicode_EqualToASCIIId(moduleName, &PyId_builtins)) {
- if (PyFile_WriteObject(moduleName, file, Py_PRINT_RAW) < 0) {
- Py_DECREF(moduleName);
+ if (!_PyUnicode_EqualToASCIIId(modulename, &PyId_builtins)) {
+ if (PyFile_WriteObject(modulename, file, Py_PRINT_RAW) < 0) {
+ Py_DECREF(modulename);
return -1;
}
- Py_DECREF(moduleName);
+ Py_DECREF(modulename);
if (PyFile_WriteString(".", file) < 0) {
return -1;
}
}
else {
- Py_DECREF(moduleName);
+ Py_DECREF(modulename);
}
}
- if (className == NULL) {
+
+ PyObject *qualname = PyType_GetQualName((PyTypeObject *)exc_type);
+ if (qualname == NULL || !PyUnicode_Check(qualname)) {
+ Py_XDECREF(qualname);
+ _PyErr_Clear(tstate);
if (PyFile_WriteString("<unknown>", file) < 0) {
return -1;
}
}
else {
- if (PyFile_WriteString(className, file) < 0) {
+ if (PyFile_WriteObject(qualname, file, Py_PRINT_RAW) < 0) {
+ Py_DECREF(qualname);
return -1;
}
+ Py_DECREF(qualname);
}
if (exc_value && exc_value != Py_None) {