Issue #5761: Add the name of the underlying file to the repr() of various IO objects.

This commit is contained in:
Antoine Pitrou 2009-05-23 19:04:03 +00:00
parent 744af44064
commit 716c444edc
7 changed files with 107 additions and 14 deletions

View file

@ -846,11 +846,26 @@ mode_string(PyFileIOObject *self)
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 *