[pypy-svn] r31199 - in pypy/dist/pypy/module/__builtin__: . test
arigo at codespeak.net
arigo at codespeak.net
Wed Aug 9 13:47:07 CEST 2006
Author: arigo
Date: Wed Aug 9 13:47:06 2006
New Revision: 31199
Modified:
pypy/dist/pypy/module/__builtin__/app_inspect.py
pypy/dist/pypy/module/__builtin__/test/test_builtin.py
Log:
Eat almost all exceptions in hasattr(), not just AttributeError.
This is a debatable feature of CPython, but our own translation
toolsuite relies on it occasionally, e.g. by doing
hasattr(random_object, '__name__')
which sometimes gives a TypeError.
Modified: pypy/dist/pypy/module/__builtin__/app_inspect.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/app_inspect.py (original)
+++ pypy/dist/pypy/module/__builtin__/app_inspect.py Wed Aug 9 13:47:06 2006
@@ -85,7 +85,9 @@
try:
getattr(obj, attr)
return True
- except AttributeError:
+ except (KeyboardInterrupt, SystemExit):
+ raise
+ except:
return False
# Replaced by the interp-level helper space.callable():
Modified: pypy/dist/pypy/module/__builtin__/test/test_builtin.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/test/test_builtin.py (original)
+++ pypy/dist/pypy/module/__builtin__/test/test_builtin.py Wed Aug 9 13:47:06 2006
@@ -417,6 +417,16 @@
assert Y().f() == ((Y,), {})
assert Y().f(42, x=43) == ((Y, 42), {'x': 43})
+ def test_hasattr(self):
+ class X(object):
+ def broken(): pass
+ abc = property(broken)
+ x = X()
+ x.foo = 42
+ assert hasattr(x, '__class__')
+ assert hasattr(x, 'foo')
+ assert not hasattr(x, 'bar')
+ assert not hasattr(x, 'abc') # CPython compliance
class TestInternal:
More information about the Pypy-commit
mailing list