Kaydet (Commit) b54447f3 authored tarafından Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

#1162154: inspect.getmembers() now skips attributes that raise AttributeError,

e.g. a __slots__ attribute which has not been set.
üst a18392a3
......@@ -253,7 +253,10 @@ def getmembers(object, predicate=None):
Optionally, only return members that satisfy a given predicate."""
results = []
for key in dir(object):
value = getattr(object, key)
try:
value = getattr(object, key)
except AttributeError:
continue
if not predicate or predicate(value):
results.append((key, value))
results.sort()
......
......@@ -91,6 +91,17 @@ class TestPredicates(IsTestBase):
self.assert_(inspect.isroutine(mod.spam))
self.assert_(inspect.isroutine([].count))
def test_get_slot_members(self):
class C(object):
__slots__ = ("a", "b")
x = C()
x.a = 42
members = dict(inspect.getmembers(x))
self.assert_('a' in members)
self.assert_('b' not in members)
class TestInterpreterStack(IsTestBase):
def __init__(self, *args, **kwargs):
unittest.TestCase.__init__(self, *args, **kwargs)
......
......@@ -137,7 +137,10 @@ Core and Builtins
Library
-------
- Issue #1696199: Add collections.Counter() for rapid and convenient
- Issue #1162154: inspect.getmembers() now skips attributes that raise
AttributeError, e.g. a __slots__ attribute which has not been set.
- Issue #1696199: Add collections.Counter() for rapid and convenient
counting.
- Issue #3860: GzipFile and BZ2File now support the context manager protocol.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment