bpo-37960: Silence only necessary errors in repr() of buffered and text streams. (GH-15543)
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index 86dd277..586e93f 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -1378,12 +1378,14 @@
{
PyObject *nameobj, *res;
- 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)) {
return NULL;
+ }
+ /* Ignore ValueError raised if the underlying stream was detached */
+ PyErr_Clear();
+ }
+ if (nameobj == NULL) {
res = PyUnicode_FromFormat("<%s>", Py_TYPE(self)->tp_name);
}
else {