В документации Python для за исключением
говорится:
Для предложения except с выражение, это выражение оценивается, и предложение соответствует исключение, если результирующий объект «Совместимый» за исключением. An объект совместим с исключением если это класс или базовый класс объекта исключения , [...]
Почему за исключением
не использует isinstance
вместо сравнения базовые классы? Это предотвращает использование __ instancecheck __
для отмены проверки экземпляра.
РЕДАКТИРОВАТЬ:
Я могу понять, что одна из причин, по которой этого не существует, заключается в том, что никто не учел его. Но есть ли причины, по которым это не должно быть реализовано?
EDIT:
Сеанс оболочки из Python 3.2a, показывающий, что попытка использовать __ subclasscheck __
для этого не работает:
>>> class MyType(type): __subclasscheck__ = lambda cls, other_cls: True
>>> class O(Exception, metaclass=MyType): pass
>>> issubclass(3, O)
0: True
>>> issubclass(int, O)
1: True
>>> try:
... 1/0
... except O:
... print('Success')
Traceback (most recent call last):
File "", line 2, in
1/0
ZeroDivisionError: division by zero
>>>