mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
#1162154: inspect.getmembers() now skips attributes that raise AttributeError,
e.g. a __slots__ attribute which has not been set.
This commit is contained in:
parent
a18392a324
commit
b54447f31c
3 changed files with 19 additions and 2 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue