Chris Withers wrote at 2008-12-13 10:18 +0000:
Dieter Maurer wrote:
I think that in some cases, it would be useful for an adapter factory to say 'I cannot handle this case' and then the adapter lookup is continued. Maybe, this is already supported? Then, maybe, you can use it?
That's exactly what returning None indicates...
def some_adapter(obj): if something: return None return somethingelse
Your use case seems to abuse adaptation:
Adaptation to an interface must always return an object which provides the interface. "None", by default, only provides very few interfaces
...indeed, however, I really do want to return None here.
Then, use something different from adaptation (as adaptation does not fit your wishes). I expect that your adapter factory can raise "ComponentLookupError" when it cannot handle the adaptation and then the "default" argument of the adapter lookup will take effect. adapter = IMyInterface(obj, None) if adapter is None: # adaptation impossible .... def adapter_factory(...): ... raise ComponentLookupError() -- Dieter