diff --git a/CHANGES.rst b/CHANGES.rst
index ad7140b..ae900d8 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -54,12 +54,18 @@
   fields in your subclass before attempting to hash or sort it. See
   `issue 157 <https://github.com/zopefoundation/zope.interface/issues/157>`_.
 
-- Remove unneeded overwrite and call to anyway inherited `__hash__` method
-  from `.declarations.Implements` class. Watching a reindex index process in
-  ZCatalog with on a Py-Spy after 10k samples the time for `.adapter._lookup`
-  was reduced from 27.5s to 18.8s (~1.5x faster). Overall reindex index time
-  shrunk from 369s to 293s (1.26x faster). See
-  `PR 161 <https://github.com/zopefoundation/zope.interface/pull/161>`_.
+- Remove unneeded override of the ``__hash__`` method from
+  ``zope.interface.declarations.Implements``. Watching a reindex index
+  process in ZCatalog with on a Py-Spy after 10k samples the time for
+  ``.adapter._lookup`` was reduced from 27.5s to 18.8s (~1.5x faster).
+  Overall reindex index time shrunk from 369s to 293s (1.26x faster).
+  See `PR 161
+  <https://github.com/zopefoundation/zope.interface/pull/161>`_.
+
+- Make the Python implementation closer to the C implementation by
+  ignoring all exceptions, not just ``AttributeError``, during (parts
+  of) interface adaptation. See `issue 163
+  <https://github.com/zopefoundation/zope.interface/issues/163>`_.
 
 4.7.1 (2019-11-11)
 ==================
diff --git a/src/zope/interface/declarations.py b/src/zope/interface/declarations.py
index 97ccd55..04e2cc8 100644
--- a/src/zope/interface/declarations.py
+++ b/src/zope/interface/declarations.py
@@ -145,13 +145,15 @@ class _ImmutableDeclaration(Declaration):
         if new_bases != ():
             raise TypeError("Cannot set non-empty bases on shared empty Declaration.")
 
+    # As the immutable empty declaration, we cannot be changed.
+    # This means there's no logical reason for us to have dependents
+    # or subscriptions: we'll never notify them. So there's no need for
+    # us to keep track of any of that.
     @property
     def dependents(self):
         return {}
 
-    def changed(self, originally_changed):
-        # Does nothing, we have no dependents or dependencies
-        return
+    changed = subscribe = unsubscribe = lambda self, _ignored: None
 
     def interfaces(self):
         # An empty iterator
@@ -163,6 +165,16 @@ class _ImmutableDeclaration(Declaration):
     def get(self, name, default=None):
         return default
 
+    def weakref(self, callback=None):
+        # We're a singleton, we never go away. So there's no need to return
+        # distinct weakref objects here; their callbacks will never
+        # be called. Instead, we only need to return a callable that
+        # returns ourself. The easiest one is to return _ImmutableDeclaration
+        # itself; testing on Python 3.8 shows that's faster than a function that
+        # returns _empty. (Remember, one goal is to avoid allocating any
+        # object, and that includes a method.)
+        return _ImmutableDeclaration
+
 
 ##############################################################################
 #
@@ -855,18 +867,19 @@ def ObjectSpecification(direct, cls):
 
 @_use_c_impl
 def getObjectSpecification(ob):
-
-    provides = getattr(ob, '__provides__', None)
+    try:
+        provides = getattr(ob, '__provides__', None)
+    except:
+        provides = None
     if provides is not None:
         if isinstance(provides, SpecificationBase):
             return provides
 
     try:
         cls = ob.__class__
-    except AttributeError:
+    except:
         # We can't get the class, so just consider provides
         return _empty
-
     return implementedBy(cls)
 
 
@@ -879,7 +892,7 @@ def providedBy(ob):
     # Try to get __providedBy__
     try:
         r = ob.__providedBy__
-    except AttributeError:
+    except:
         # Not set yet. Fall back to lower-level thing that computes it
         return getObjectSpecification(ob)
 
diff --git a/src/zope/interface/interface.py b/src/zope/interface/interface.py
index 7fa56aa..57998e0 100644
--- a/src/zope/interface/interface.py
+++ b/src/zope/interface/interface.py
@@ -159,7 +159,10 @@ class InterfaceBase(object):
     def __call__(self, obj, alternate=_marker):
         """Adapt an object to the interface
         """
-        conform = getattr(obj, '__conform__', None)
+        try:
+            conform = getattr(obj, '__conform__', None)
+        except:
+            conform = None
         if conform is not None:
             adapter = self._call_conform(conform)
             if adapter is not None:

Possible problem with _ImmutableDeclaration?
With the current master and Plone there are some failiures. One of them here:

```
Failed example:
    IKeyReference(item_c)
Expected:
    Traceback (most recent call last):
    ...
    TypeError: ('Could not adapt', <SimpleItem at c>,
    <InterfaceClass zope.keyreference.interfaces.IKeyReference>)
Got:
    Traceback (most recent call last):
      File "/home/jensens/.pyenv/versions/3.7.5/lib/python3.7/doctest.py", line 1329, in __run
        compileflags, 1), test.globs)
      File "<doctest README.rst[112]>", line 1, in <module>
        IKeyReference(item_c)
      File "/home/jensens/.dotfiles/.buildout/shared-eggs/zope.component-4.5-py3.7.egg/zope/component/_api.py", line 141, in adapter_hook
        return sitemanager.queryAdapter(object, interface, name, default)
      File "/home/jensens/ws/cdev/p52/src/zope.interface/src/zope/interface/registry.py", line 348, in queryAdapter
        return self.adapters.queryAdapter(object, interface, name, default)
      File "/home/jensens/ws/cdev/p52/src/zope.interface/src/zope/interface/adapter.py", line 533, in _uncached_lookup
        self._subscribe(*required)
      File "/home/jensens/ws/cdev/p52/src/zope.interface/src/zope/interface/adapter.py", line 511, in _subscribe
        r.subscribe(self)
      File "/home/jensens/ws/cdev/p52/src/zope.interface/src/zope/interface/interface.py", line 235, in subscribe
        self._dependents[dependent] = self.dependents.get(dependent, 0) + 1
    TypeError: 'NoneType' object does not support item assignment

```

After debugging I found it is probably caused by the introduction of `_ImmutableDeclaration`. 
In `Specificaton` ..
https://github.com/zopefoundation/zope.interface/blob/489328a5afc1430a064db2dba7a7a408591789f9/src/zope/interface/interface.py#L228-L247
... `subscribe` and `unsubscribe` methods are defined which modifies `_dependents`, which is set deferred on first access.
In `_ImmutableDeclaration` a subclass of `Declaration` which is a subclass of above `Specification` ...
https://github.com/zopefoundation/zope.interface/blob/489328a5afc1430a064db2dba7a7a408591789f9/src/zope/interface/declarations.py#L148-L150
... the on-access creating property is overwritten, but subscribe and unsubscribe are still in place.

Code is calling subscribe in above traceback and it fails.

I still do not understand the difference of `IKeyReference` compared to other Interfaces here, it does not look special?
https://github.com/zopefoundation/zope.keyreference/blob/master/src/zope/keyreference/interfaces.py#L31 
diff --git a/src/zope/interface/tests/test_adapter.py b/src/zope/interface/tests/test_adapter.py
index 25cb4bb..6703a48 100644
--- a/src/zope/interface/tests/test_adapter.py
+++ b/src/zope/interface/tests/test_adapter.py
@@ -997,6 +997,24 @@ class AdapterLookupBaseTests(unittest.TestCase):
         result = alb.queryMultiAdapter((foo,), IBar, default=_default)
         self.assertTrue(result is _default)
 
+    def test_queryMultiAdapter_errors_on_attribute_access(self):
+        # Which leads to using the _empty singleton as "requires"
+        # argument. See https://github.com/zopefoundation/zope.interface/issues/162
+        from zope.interface.interface import InterfaceClass
+        IFoo = InterfaceClass('IFoo')
+        registry = self._makeRegistry()
+        alb = self._makeOne(registry)
+        alb.lookup = alb._uncached_lookup
+        class UnexpectedErrorsLikeAcquisition(object):
+
+            def __getattribute__(self, name):
+                raise RuntimeError("Acquisition does this. Ha-ha!")
+
+        result = alb.queryMultiAdapter(
+            (UnexpectedErrorsLikeAcquisition(),),
+            IFoo,
+        )
+
     def test_queryMultiAdaptor_factory_miss(self):
         from zope.interface.declarations import implementer
         from zope.interface.interface import InterfaceClass

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest coverage zope.event
apt-get update apt-get install -y gcc
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
coverage==7.8.0
exceptiongroup==1.2.2
iniconfig==2.1.0
packaging==24.2
pluggy==1.5.0
pytest==8.3.5
tomli==2.2.1
zope.event==5.0
-e git+https://github.com/zopefoundation/zope.interface.git@489328a5afc1430a064db2dba7a7a408591789f9#egg=zope.interface

name: zope.interface
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.8.0
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - tomli==2.2.1
      - zope-event==5.0
prefix: /opt/conda/envs/zope.interface

src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_queryMultiAdapter_errors_on_attribute_access
src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test__generation_after_calling_changed src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test__generation_after_changing___bases__ src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test__generation_on_first_creation src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_lookup_delegation src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_register src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_register_with_invalid_name src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_register_with_same_value src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_register_with_value_None_unregisters src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_registered_empty src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_registered_non_empty_hit src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_registered_non_empty_miss src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unregister_empty src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unregister_hit_clears_empty_subcomponents src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unregister_non_empty_miss_on_name src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unregister_non_empty_miss_on_required src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unregister_with_value_not_None_miss src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_after_multiple src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_empty src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_hit src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_instance_method src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_non_empty_miss_on_required src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_non_empty_miss_on_value src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_w_None_after_multiple src/zope/interface/tests/test_adapter.py::BaseAdapterRegistryTests::test_unsubscribe_with_value_not_None_miss src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_adapter_hook_hit_factory_returns_None src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_adapter_hook_hit_factory_returns_adapter src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_adapter_hook_miss_no_default src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_adapter_hook_miss_w_default src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_adapter_hook_w_invalid_name src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_cached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_miss_no_default src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_miss_w_default src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_miss_w_default_negative_cache src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_not_cached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_not_cached_after_changed src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup1_w_invalid_name src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookupAll_cached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookupAll_uncached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_cached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_cached_multi_required src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_miss_no_default src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_miss_w_default src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_not_cached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_not_cached_after_changed src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_not_cached_multi_required src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_lookup_w_invalid_name src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_queryAdapter src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_subscriptions_cached src/zope/interface/tests/test_adapter.py::LookupBaseFallbackTests::test_subscriptions_uncached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_adapter_hook_hit_factory_returns_None src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_adapter_hook_hit_factory_returns_adapter src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_adapter_hook_miss_no_default src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_adapter_hook_miss_w_default src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_adapter_hook_w_invalid_name src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_cached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_miss_no_default src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_miss_w_default src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_miss_w_default_negative_cache src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_not_cached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_not_cached_after_changed src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup1_w_invalid_name src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookupAll_cached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookupAll_uncached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_cached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_cached_multi_required src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_miss_no_default src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_miss_w_default src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_not_cached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_not_cached_after_changed src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_not_cached_multi_required src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_lookup_w_invalid_name src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_optimizations src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_queryAdapter src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_subscriptions_cached src/zope/interface/tests/test_adapter.py::LookupBaseTests::test_subscriptions_uncached src/zope/interface/tests/test_adapter.py::VerifyingBaseFallbackTests::test_adapter_hook src/zope/interface/tests/test_adapter.py::VerifyingBaseFallbackTests::test_lookup src/zope/interface/tests/test_adapter.py::VerifyingBaseFallbackTests::test_lookup1 src/zope/interface/tests/test_adapter.py::VerifyingBaseFallbackTests::test_lookupAll src/zope/interface/tests/test_adapter.py::VerifyingBaseFallbackTests::test_queryAdapter src/zope/interface/tests/test_adapter.py::VerifyingBaseFallbackTests::test_subscriptions src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_adapter_hook src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_lookup src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_lookup1 src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_lookupAll src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_optimizations src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_queryAdapter src/zope/interface/tests/test_adapter.py::VerifyingBaseTests::test_subscriptions src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookupAll_components_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookupAll_empty_ro src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookupAll_extendors_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookupAll_order_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookupAll_simple_hit src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_components_miss_wrong_iface src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_components_miss_wrong_name src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_empty_ro src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_extendors_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_order_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_repeated_hit src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_lookup_simple_hit src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_subscriptions_components_miss_wrong_iface src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_subscriptions_components_miss_wrong_name src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_subscriptions_empty_ro src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_subscriptions_extendors_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_subscriptions_order_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test__uncached_subscriptions_simple_hit src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_add_extendor src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_changed_empty_required src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_changed_w_required src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_ctor_empty_registry src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_ctor_w_registry_provided src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_init_extendors_after_registry_update src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_names src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_queryMultiAdaptor_factory_hit src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_queryMultiAdaptor_factory_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_queryMultiAdaptor_lookup_miss src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_remove_extendor src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_subscribers_w_provided src/zope/interface/tests/test_adapter.py::AdapterLookupBaseTests::test_subscribers_wo_provided src/zope/interface/tests/test_adapter.py::AdapterRegistryTests::test__setBases_removing_existing_subregistry src/zope/interface/tests/test_adapter.py::AdapterRegistryTests::test__setBases_w_existing_entry_continuing src/zope/interface/tests/test_adapter.py::AdapterRegistryTests::test__setBases_wo_stray_entry src/zope/interface/tests/test_adapter.py::AdapterRegistryTests::test_changed_w_subregistries src/zope/interface/tests/test_adapter.py::AdapterRegistryTests::test_ctor_no_bases src/zope/interface/tests/test_adapter.py::AdapterRegistryTests::test_ctor_w_bases src/zope/interface/tests/test_adapter.py::Test_utils::test__convert_None_to_Interface_w_None src/zope/interface/tests/test_adapter.py::Test_utils::test__convert_None_to_Interface_w_other src/zope/interface/tests/test_adapter.py::Test_utils::test__normalize_name_other src/zope/interface/tests/test_adapter.py::Test_utils::test__normalize_name_str src/zope/interface/tests/test_adapter.py::Test_utils::test__normalize_name_unicode
src/zope/interface/declarations.py src/zope/interface/interface.py CHANGES.rst
src/zope/interface/declarations.py src/zope/interface/interface.py CHANGES.rst