diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-13 23:39:22 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-13 23:39:22 (GMT) |
commit | b54447f31cf8f590ef526d2707f26041720f5784 (patch) | |
tree | 9f9ba59ce4f5437662fb9b9d4e9c13e2980fc6cf | |
parent | a18392a324ba9ee8b267ac9181a67751d8150abc (diff) | |
download | cpython-b54447f31cf8f590ef526d2707f26041720f5784.zip cpython-b54447f31cf8f590ef526d2707f26041720f5784.tar.gz cpython-b54447f31cf8f590ef526d2707f26041720f5784.tar.bz2 |
#1162154: inspect.getmembers() now skips attributes that raise AttributeError,
e.g. a __slots__ attribute which has not been set.
-rw-r--r-- | Lib/inspect.py | 5 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 5 |
3 files changed, 19 insertions, 2 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index 1685bfc..8268be1 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -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() diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 300d143..b653f40 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -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. |