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): ...@@ -253,7 +253,10 @@ def getmembers(object, predicate=None):
Optionally, only return members that satisfy a given predicate.""" Optionally, only return members that satisfy a given predicate."""
results = [] results = []
for key in dir(object): for key in dir(object):
value = getattr(object, key) try:
value = getattr(object, key)
except AttributeError:
continue
if not predicate or predicate(value): if not predicate or predicate(value):
results.append((key, value)) results.append((key, value))
results.sort() results.sort()
......
...@@ -91,6 +91,17 @@ class TestPredicates(IsTestBase): ...@@ -91,6 +91,17 @@ class TestPredicates(IsTestBase):
self.assert_(inspect.isroutine(mod.spam)) self.assert_(inspect.isroutine(mod.spam))
self.assert_(inspect.isroutine([].count)) 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): class TestInterpreterStack(IsTestBase):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
unittest.TestCase.__init__(self, *args, **kwargs) unittest.TestCase.__init__(self, *args, **kwargs)
......
...@@ -137,7 +137,10 @@ Core and Builtins ...@@ -137,7 +137,10 @@ Core and Builtins
Library 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. counting.
- Issue #3860: GzipFile and BZ2File now support the context manager protocol. - 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