Terry J. Reedy <tjre...@udel.edu> added the comment:

With 3.2 on WinXP, I get no error report in interactive mode,
with either IDLE or plain interpreter, nor from 'python file' in Command Prompt 
window. But now with the print added to what I ran before, I see no print 
output, and I see that IDLE is restarting after executing the code, so 
something *is* wrong. Further experiments with other print statements in 
various places show that 'str(foo)' is the specific culprit.

Appears to act same on 3.1 for me.

Patch is to this code (from 3.2, presume same otherwise):
==============================
static PyObject *
object_str(PyObject *self) 
{
    unaryfunc f;

    f = Py_TYPE(self)->tp_repr;
    if (f == NULL)
        f = object_repr;
    return f(self);
}
=============================
Patch prevent infinite recursion if f == object_str.
Whether or not this fixes issue ('should' is a bit vague, confirmation is 
needed) this seems like a good idea.

To be applied, patch should have a new testcase that fails without the patch 
and passes with it applied.
----
def test_NoCrashIfStrIsRepr(self)
  'see issue 11603'
  class Foo(object): # delete object for 3.x
    pass
  Foo.__repr__ = Foo.__str__
  foo = Foo()
  s = str(foo)
----
would be a start. I so not know if any AssertX is needed since just finishing 
would be a success. However, I also do not know where to put it as there is no 
test_object or test_typeobject file that I see.

----------
nosy: +barry, terry.reedy
stage:  -> test needed
versions: +Python 3.1, Python 3.3

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue11603>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to