[IPython-user] That trait_names attribute bit me!

Matthew Wilson matt@tplus1....
Sun Dec 14 15:39:44 CST 2008

A friend wrote a neat mock-object library that among other things,
always replies True to any hasattr requests.

It also can be used as an infinitely long iterable.

So when I tried to do tab completion on an instance of this mock Class,
I got stuck in an infinite loop because of these lines in dir2 (defined
in genutils.py):

    # this is the 'dir' function for objects with Enthought's traits
    if hasattr(obj, 'trait_names'):
            may_have_dupes = True
        except TypeError:
            # This will happen if `obj` is a class and not an instance.

    print "did that stuff"

Just to be clear, my object is obj, and can be used as an iterable and
will NEVER raise a StopIteration.  Also, you can ask it if it has ANY
attribute, and it will always say yes.

So, the line


goes and goes and goes, as words keeps appending more elements.

I really like the suggestion in this ticket, to disable this feature by


Alternately, in the short run, can we combine the 

    hasattr(obj, 'trait_names') 

test with an 

    isinstance(obj, Enthought)

test (or something similar)?

IPython is great.  I can't imagine programming without it.


More information about the IPython-user mailing list