Current documentation says:
"An object is
compatible with an exception if it is the class or a base class of the exception
object or a tuple containing an item compatible with the exception."
It is, in my opinion, not very clear from this that the __instancecheck__ mechanism is bypassed.
Should the documentation perhaps be adapted to explain that the class needs to actually occur in the MRO
and that virtual base classes are not considered for matching purposes?
"An object is
compatible with an exception if it is the class or a non-virtual base class of the exception
object or a tuple containing an item compatible with the exception.
The exception matching machinery ignores the __instancecheck__ mechanism."
Stephan