bpo-37960: Silence only necessary errors in repr() of buffered and text streams. (GH-15543)
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 05911d9..7ddac80 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -2899,14 +2899,14 @@
}
goto error;
}
- nameobj = _PyObject_GetAttrId((PyObject *) self, &PyId_name);
- if (nameobj == NULL) {
- if (PyErr_ExceptionMatches(PyExc_Exception))
- PyErr_Clear();
- else
+ if (_PyObject_LookupAttrId((PyObject *) self, &PyId_name, &nameobj) < 0) {
+ if (!PyErr_ExceptionMatches(PyExc_ValueError)) {
goto error;
+ }
+ /* Ignore ValueError raised if the underlying stream was detached */
+ PyErr_Clear();
}
- else {
+ if (nameobj != NULL) {
s = PyUnicode_FromFormat(" name=%R", nameobj);
Py_DECREF(nameobj);
if (s == NULL)
@@ -2915,14 +2915,10 @@
if (res == NULL)
goto error;
}
- modeobj = _PyObject_GetAttrId((PyObject *) self, &PyId_mode);
- if (modeobj == NULL) {
- if (PyErr_ExceptionMatches(PyExc_Exception))
- PyErr_Clear();
- else
- goto error;
+ if (_PyObject_LookupAttrId((PyObject *) self, &PyId_mode, &modeobj) < 0) {
+ goto error;
}
- else {
+ if (modeobj != NULL) {
s = PyUnicode_FromFormat(" mode=%R", modeobj);
Py_DECREF(modeobj);
if (s == NULL)