Message83752
this is similar to bug #5370, but this for is a different reason. also,
i have seen several sites on google that mention it, so it has happened
to quite a few people.
the bug is that when calling dir() on a object, it looks for __members__
and __methods__, which might not exist, thus invoking __getattr__ (if it
exists).
if __getattr__ fails, say, due to a never ending recusion, the exception
is silently swallowed. this was the behavior in py2.5. since 2.6, it
emits a warning (that looks like PyErr_WriteUnraisable) with the
strangest message:
Exception RuntimeError: 'maximum recursion depth exceeded in
__subclasscheck__' in <type 'exceptions.AttributeError'> ignored
this is very confusing. either dir() raises this exception, or silently
ignore it, but displaying this message is only confusing.
i haven't been able to detect why this happens:
* the source of this exception, merge_list_attr, calls PyErr_Clear
* nobody seems to call PyErr_WriteUnraisable
here's a snippet:
class Foo(object):
def __getattr__(self, name):
return self.x # which will recursively call __getattr__
>>> f = Foo()
>>> print dir(f)
Exception RuntimeError: 'maximum recursion depth exceeded in
__subclasscheck__' in <type 'exceptions.AttributeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded in
__subclasscheck__' in <type 'exceptions.AttributeError'> ignored
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattr__', '__getattribute__', '__hash__', '__init__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '__weakref__'] |
|
Date |
User |
Action |
Args |
2009-03-18 15:25:51 | gangesmaster | set | recipients:
+ gangesmaster, georg.brandl |
2009-03-18 15:25:50 | gangesmaster | set | messageid: <1237389950.95.0.980403444987.issue5508@psf.upfronthosting.co.za> |
2009-03-18 15:25:48 | gangesmaster | link | issue5508 messages |
2009-03-18 15:25:44 | gangesmaster | create | |
|