Issue #5761: Add the name of the underlying file to the repr() of various IO objects.
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index 9400c91..d063fbf 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -846,11 +846,26 @@
static PyObject *
fileio_repr(PyFileIOObject *self)
{
- if (self->fd < 0)
- return PyUnicode_FromFormat("io.FileIO(-1)");
+ PyObject *nameobj, *res;
- return PyUnicode_FromFormat("io.FileIO(%d, '%s')",
- self->fd, mode_string(self));
+ if (self->fd < 0)
+ return PyUnicode_FromFormat("<_io.FileIO [closed]>");
+
+ nameobj = PyObject_GetAttrString((PyObject *) self, "name");
+ if (nameobj == NULL) {
+ if (PyErr_ExceptionMatches(PyExc_AttributeError))
+ PyErr_Clear();
+ else
+ return NULL;
+ res = PyUnicode_FromFormat("<_io.FileIO fd=%d mode='%s'>",
+ self->fd, mode_string(self));
+ }
+ else {
+ res = PyUnicode_FromFormat("<_io.FileIO name=%R mode='%s'>",
+ nameobj, mode_string(self));
+ Py_DECREF(nameobj);
+ }
+ return res;
}
static PyObject *